HttpWebRequest获取请求网址的最大长度

时间:2017-05-24 07:12:36

标签: c# rest get webrequest

我的任务是建立一个服务,将第三方API中的信息提取到我们的内部数据仓库中。他们有一个get请求来提取我想要的数据,你可以通过查询字符串指定你想要的参数。 E.g。

http://www.api.com?parameter=firstname&parameter=surname

在我的代码中,URL的长度超过3600个字符,因为需要116个参数。

我的网页请求是使用以下代码生成的:

    private HttpWebRequest GetWebRequest(string url, string type, int timeout)
    {
        var httpWebRequest = (HttpWebRequest) WebRequest.Create(_baseUrl + url);
        httpWebRequest.Method = type;
        httpWebRequest.Timeout = timeout;            
        httpWebRequest.ContentType = "application/json";
        httpWebRequest.Headers.Add("Authorization", "Bearer " + _token.access_token);
        httpWebRequest.ContentLength = 0;

        return httpWebRequest;
    }

当我运行代码时,我收到一个Web异常消息"无法连接到远程服务器"内部异常消息"无法建立连接,因为目标计算机主动拒绝了它的IP地址"

我没有在这篇文章中包含整个网址,因为我发现如果我将网址复制并粘贴到Postman并运行请求我得到了我期望的响应,所以我知道网址格式正确。我还发现,如果我将网址的长度减少到大约2100个字符,那么请求就可以了。

我一直在搜索但是没有找到任何明确的文档来暗示URL的长度有限制,但是我无法解释为什么整个url在Postman中工作但在ac#web请求中没有,如果我剪切了URL的长度,然后在Web请求中工作!

如果有人对此有任何想法,我会很高兴。

1 个答案:

答案 0 :(得分:0)

old post建议根据服务器和客户端的最大请求长度介于2到4 KB之间,这与您的观察结果一致。

Postman是'另一个'客户端,所以它很可能在那里工作,而它不在您的程序中。底线是:你不应该GET这么长的请求。你应该POST代替他们。如果您可以控制该服务,则可以对其进行更改,以便它也支持POST,如果不是(已记录或未记录)。