如何在http标头中设置用户代理

时间:2017-05-11 21:20:02

标签: c# httpwebrequest user-agent

我试图在C#

中的覆盖函数GetWebRequest中的http头中设置user-agent
protected override System.Net.WebRequest GetWebRequest(Uri uri)
{
    System.Net.HttpWebRequest request = base.GetWebRequest(uri) as System.Net.HttpWebRequest;                
    request.Headers.Add("User-Agent", (someone@yahoo.com"));
    request.ProtocolVersion = System.Net.HttpVersion.Version10;
    request.CachePolicy = new RequestCachePolicy(RequestCacheLevel.NoCacheNoStore);
    request.KeepAlive = false;
    return request;
} 

我的请求被返回时出现错误,我被告知他们没有看到用户代理。我已经尝试过设置标头用户代理的其他方法,但到目前为止还没有任何工作。我尝试过的其他一些方法是

request.Headers["User-Agent"] = "someone@yahoo.com");
request.UserAgent = "someone@yahoo.com";
request.Headers.Set("User-Agent", "someone@yahoo.com");

我尝试发送请求的网站告诉我,如果出现问题需要一种方法来识别我们,并且请确保您的请求包含"用户代理" http标题。"他们给我发了一个例子,但它正在使用CURL

curl_setopt($ch, CURLOPT_USERAGENT,'jeremy.fields@gmail.com)

3 个答案:

答案 0 :(得分:1)

用户代理代表您的浏览器,如Firefox或Chrome

通过将HttpWebRequest强制转换为HttpWebRequest来使用HttpWebRequest上的UserAgent属性

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.UserAgent = "my user agent";

request = new HttpClient();
request.DefaultRequestHeaders.TryAddWithoutValidation("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0");

答案 1 :(得分:0)

我认为您错误地使用了User-Agent标头。来自MSDN

  

当您访问网页时,您的浏览器会将用户代理字符串发送到   托管您正在访问的网站的服务器。这个字符串   表示您正在使用的浏览器,版本号和详细信息   关于您的系统,例如操作系统和版本。网络   服务器可以使用此信息来提供定制的内容   为您的特定浏览器。

该页面的一个例子:

  

User-Agent:Mozilla / 5.0(Windows NT 6.3; Trident / 7.0; rv:11.0)之类的   壁虎

答案 2 :(得分:0)

如果您编写自己的请求HTTP内容的应用程序,则最佳做法是在用户代理中设置任何形式的标识。如果众所周知,可以是电子邮件,网站或产品名称。

根据HTTP specification用户代理中的产品令牌:

  

(...)应该简短明了。他们一定不能      用于广告或其他非必要信息。虽然有      令牌字符可能出现在产品版本中,此令牌应      仅用于版本标识符(即,      同一产品应该只在产品版本部分有所不同      产品价值)。

最简单的形式可以是以下的一个

request.UserAgent = "MyAppName/1.0.0";
request.UserAgent = "MyAppName/1.0.0 (someone@example.com)";
request.UserAgent = "MyAppName/1.0.0 (+http://www.example.com)";

评论网址必须以+为前缀(this answerBrendon中有记载)。同样值得注意的是,任何邮件地址都应发给负责该产品的公司或开发人员,而不是发给使用该产品的用户。

如果您需要与现代浏览器兼容(如果您希望结果为HTML,而不是具有xml / json / etc的API),则还可以添加“默认” Mozilla版本以及您的操作系统信息:

request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) MyAppName/1.0.0 (someone@example.com)"

即使您要发送的信息也最好发送正确的信息,而不仅仅是复制找到的具有错误操作系统信息的用户代理字符串。