您的位置:首页 > 理论基础 > 计算机网络

通过httpwebrequest实现http的post和get方法莫名出现500内部服务器错误的解决办法

2017-04-25 12:58 996 查看
通过httpwebrequest实现http的post方法

Dim data As Byte()
data = System.Text.Encoding.UTF8.GetBytes("...") '参数name1=value1&name2=value2...

'发送请求
Dim myReq As System.Net.HttpWebRequest = System.Net.WebRequest.Create(svcurl)
myReq.Method = "POST"
myReq.ContentType = "application/x-www-form-urlencoded;charset=UTF-8"
myReq.ContentLength = data.Length

Dim myStream As System.IO.Stream = myReq.GetRequestStream
myStream.Write(data, 0, data.Length)
myStream.Close()

'接收响应
Dim myResponse As System.Net.HttpWebResponse = myReq.GetResponse
Dim strResponse As String = ""
myStream = myResponse.GetResponseStream
Dim myStreamReader As New System.IO.StreamReader(myStream)
strResponse = myStreamReader.ReadToEnd

myStreamReader.Close()
myStreamReader = Nothing
myStream.Close()
myStream = Nothing
myResponse.Close()
myResponse = Nothing
myReq = Nothing

通过httpwebrequest实现http的get方法

'发送Web请求
Dim myReq As System.Net.HttpWebRequest = System.Net.WebRequest.Create(svcurl)
myReq.Headers.Set("Pragma", "no-cache")
myReq.Method = "GET"

'接收响应
Dim myResponse As System.Net.HttpWebResponse = myReq.GetResponse
Dim strResponse As String = ""
Dim myStream As System.IO.Stream = myResponse.GetResponseStream
Dim myStreamReader As New System.IO.StreamReader(myStream)
strResponse = myStreamReader.ReadToEnd
myStreamReader.Close()
myStreamReader = Nothing
myStream.Close()
myStream = Nothing
myResponse.Close()
myResponse = Nothing

myReq = Nothing

一般来说如果通过浏览器能访问那么通过httpwebrequest应该也可以正常访问,但是这次就碰到了一个通过浏览器能正常访问通过httpwebrequest报500内部服务器错误的问题,真是莫名其妙让人百思不得其解,后来经过仔细分析查找发现网站的Application_BeginRequest事件中有一段分析http headers的User-agent的代码没加错误处理,而通过上面的代码并没有给User-agent初始化,这或许就是问题的根源。

当然除了User-agent以外可能还有别的东西可能会有影响,httpwebrequest可以设置的http headers如下表

标头
设置方
Accept
由 Accept 属性设置。
Connection
由 Connection 属性和 KeepAlive 属性设置。
Content-Length
由 ContentLength 属性设置。
Content-Type
由 ContentType 属性设置。
Expect
由 Expect 属性设置。
Date
由系统设置为当前日期。
Host
由系统设置为当前主机信息。
If-Modified-Since
由 IfModifiedSince 属性设置。
Range
由 AddRange 方法设置。
Referer
由 Referer 属性设置。
Transfer-Encoding
由 TransferEncoding 属性设置(SendChunked 属性必须为 true)。
User-Agent
由 UserAgent 属性设置。
再碰到类似的问题就检查Application_BeginRequest里有没有对http headers做什么操作吧。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: