403 HttpWebRequest出现禁止错误

本文关键字:禁止 错误 HttpWebRequest | 更新日期: 2023-09-27 18:26:39

我正在进行一个web请求,该请求将用户重定向到另一个URL并获取数据。在浏览器中,它正确地重定向&返回重定向URL的结果。然而,它不能在控制台应用程序中工作:

HttpWebRequest webrequest = (HttpWebRequest)WebRequest.Create(url1);
webrequest.KeepAlive = true;
webrequest.Method = "GET";
webrequest.ContentType = "text/plain";
webrequest.Timeout = 20000;
WebResponse webresponse = webrequest.GetResponse();
Encoding enc = System.Text.Encoding.GetEncoding("utf-8");
StreamReader loResponseStream = new StreamReader(webresponse.GetResponseStream(), enc);
string result = loResponseStream.ReadToEnd();

我得到的结果是:

<html><body>You are being <a href='"..........................'">redirected</a>.</body></html>

所以我需要从锚标签的href URL中获取数据。

var matches = Regex.Matches(result, @"<a'shref=""(?<url>.*?)"">(?<text>.*?)</a>");
Console.WriteLine(matches[0].Groups["url"].Value);
webrequest = (HttpWebRequest)WebRequest.Create(matches[0].Groups["url"].Value);
webresponse = (HttpWebResponse)webrequest.GetResponse();
enc = System.Text.Encoding.GetEncoding("utf-8");
loResponseStream = new StreamReader(webresponse.GetResponseStream(), enc);
result = loResponseStream.ReadToEnd();

但我在第二个请求中得到了一个403:禁止的错误。

对于Fiddler,响应为:

<?xml version="1.0" encoding="UTF-8"?> <Error><Code>SignatureDoesNotMatch</Code><Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message><StringToSignBytes>47 45 54 0a 0a 74 65 78 74 2f 70 6c 61 69 6e 0a 31 33 37 35 38 36 34 31 31 32 0a 2f 61 70 70 74 68 6f 72 69 74 79 2d 73 74 61 74 69 63 2d 72 65 70 6f 72 74 73 2f 36 37 66 62 34 35 39 62 65 63 35 66 63 34 39 37 30 61 32 39 65 64 30 33 61 64 37 30 64 30 31 32 2f 65 6e 2e 6a 73 6f 6e</StringToSignBytes><RequestId>04FB1EFE872CE953</RequestId><HostId>z5KnzkJ2+qzkz1Dad80OPACAvbUbQppLTBRzVp6JiPIIAEWWKi9nckBdXLk5pHzu</HostId><SignatureProvided>kGtsbufDT6eOIDuHnVfDGY20XMA=</SignatureProvided><StringToSign>GET

这里,Signature被发送到第二个请求与我在第一个响应的href URL中收到的相同。

此外,两个请求在浏览器中都具有标头Connection: keep-alive,但在控制台应用程序中,只有第一个请求具有该标头(即使在webrequest.KeepAlive = true;之后)。

403 HttpWebRequest出现禁止错误

尝试添加用户代理:

request.UserAgent = @"Mozilla/5.0 (compatible; Rigor/1.0.0; http://rigor.com)";