【问题标题】:Webrequest, proxy and post data网络请求、代理和发布数据
【发布时间】:2014-04-30 11:34:25
【问题描述】:

当我将发布数据发送到代理服务器时 - 它返回错误:

尝试处理请求时遇到无效请求错误:
一些可能的问题是:
失踪或未知 请求方法。
缺少 URL。
缺少 HTTP 标识符 (HTTP/1.0)。
请求过大。
缺少内容长度 POST 或 PUT 请求。
主机名中的非法字符;下划线 不允许。
HTTP/1.1 期望:正在从 HTTP/1.0 软件。

和标题:

    /post.php?tid=19 HTTP/1.1
    User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:28.0) Gecko/20100101 Firefox/28.0
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Content-Type: application/x-www-form-urlencoded
    Referer: http://site.ru/viewtopic.php?pid=51
    Host: site.ru
    Content-Length: 552
    Expect: 100-continue
    Proxy-Connection: Keep-Alive

在程序中设置代理:

request = (HttpWebRequest)HttpWebRequest.Create(postUrl);
request.Proxy = new WebProxy( this.ip + ":" + this.port);
request.UseDefaultCredentials = true; 

发送请求:

try
{
    System.Net.ServicePointManager.Expect100Continue = false;
    Stream dataStream = request.GetRequestStream();
    dataStream.Write(data, 0, data.Length);
    dataStream.Close();
    WebResponse response = request.GetResponse();
    Console.WriteLine(((HttpWebResponse)response).StatusDescription);
    dataStream = response.GetResponseStream();
    StreamReader reader = new StreamReader(dataStream);
    string responseFromServer = reader.ReadToEnd();
    Console.WriteLine(responseFromServer);
    reader.Close();
    dataStream.Close();
    response.Close();

}
catch (WebException ex)
{
    Console.WriteLine(ex.Status);
    if (ex.Response != null)
    {
        if (ex.Response.ContentLength != 0)
        {
            using (var stream = ex.Response.GetResponseStream())
            {
using (var reader = new StreamReader(stream))
{
    Console.WriteLine(reader.ReadToEnd());
}
            }
        }
    }
}

当代理服务器被禁用或注释掉代码时发送帖子数据 - 请求成功

//流数据流 = request.GetRequestStream();
//dataStream.Write(data, 0, data.Length);
//dataStream.Close();

感谢您的回答!

【问题讨论】:

    标签: c# http post proxy webrequest


    【解决方案1】:

    关于缺少 HTTP 标识符的备注,确实

    request.Proxy = new WebProxy("http://" + this.ip + ":" + this.port);
    

    有什么不同吗?

    【讨论】:

    • 没有为代理设置凭据:尝试 request.Proxy.Credentials = CredentialsCache.DefaultNetworkCredentials
    • 我添加了这个设置,但错误仍然存​​在。 request.Proxy.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-14
    • 1970-01-01
    • 2013-12-24
    • 1970-01-01
    • 1970-01-01
    • 2021-06-23
    • 2020-07-20
    相关资源
    最近更新 更多