【问题标题】:How to read response using webrequest如何使用 webrequest 读取响应
【发布时间】:2017-11-08 14:06:13
【问题描述】:

我正在尝试使用 WebRequest 从页面获取响应。

但是我的代码只返回没有我的值的源代码。

代码:

Dim request As HttpWebRequest
request = WebRequest.Create("http://www.jigar.net/demo/httprequestdemoclient.aspx")
Dim postData As String = "text1=hello"
Dim data As Byte() = Encoding.ASCII.GetBytes(postData)
request.KeepAlive = True
request.Method = WebRequestMethods.Http.Post
request.ContentType = "application/x-www-form-urlencoded"
request.ContentLength = data.Length
Using stream As Stream = request.GetRequestStream()
stream.Write(data, 0, data.Length)
End Using
Dim response As WebResponse = request.GetResponse()
Dim responseString As String = New StreamReader(response.GetResponseStream()).ReadToEnd()
MsgBox(responseString)

我做错了什么?谢谢

【问题讨论】:

  • “没有我的价值观的源代码”是什么意思? responseString 具体包含什么?你希望它包含什么?
  • 嗯,响应字符串只包含页面源代码。我期望相同的代码有几行额外的(postdata)。就像您访问该页面时一样,填写输入并点击帖子。
  • 你期待什么“额外的行”?请明确点。目前还不清楚实际问题是什么。来自网络服务器的响应将是呈现页面的代码。
  • 缺少响应字符串
    field1 : hellofield2 :
  • 好的,为什么您期望会出现在响应中?这听起来像是您应该与维护该服务器的人一起讨论的事情。如果他们返回意外的响应,那么我们对此无能为力。如果您能具体说明为什么该值应该存在,我们或许可以提供帮助。

标签: vb.net httpwebrequest


【解决方案1】:

在您使用的链接上有更多表单字段。你发了一个,但我数了六个:

  • 文本1
  • 文本2
  • ctl01
  • __VIEWSTATE
  • __VIEWSTATEGENERATOR
  • __EVENTVALIDATION

暂时调试一下,如果我只发送前两个的值,那么我会得到类似于你描述的响应。但是,如果我发送所有六个值,我会得到您期望的响应。

您的流程似乎应该包括几个步骤:

  1. 向 URL 发出 GET 请求
  2. 解析服务器期望返回的其他表单值(以上所有内容,Text1Text2 除外)
  3. 在您的 POST 请求中包含这 4 个额外的键/值对

基本上,该网站似乎使用隐藏的表单值来“验证” POST 请求,确保它来自对页面的有效使用,而不是自动请求。 (基本上,稍微难做你想做的事。)你必须先发出一个 GET 请求来获取这些值并在你的 POST 请求中使用它们。

【讨论】:

    猜你喜欢
    • 2011-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-02
    • 2013-11-25
    • 2019-08-09
    • 2014-01-16
    • 2016-08-02
    相关资源
    最近更新 更多