C# HttpWebRequest403被禁止

C# HttpWebRequest403被禁止,c#,httpwebrequest,basic-authentication,httpwebresponse,C#,Httpwebrequest,Basic Authentication,Httpwebresponse,我正在尝试向服务器生成HttpWebRequest。我已经测试了我正在使用的用户名和密码,它们使用目标网站上的登录表单进行了正确的身份验证 我查看并阅读了Stack上关于403的所有其他帖子,这些帖子涉及HttpWebRequest,我更新了我的代码,使其具有有效的useragent、Accept字段和ContentType。忽略前三个属性中的一个似乎是人们最常犯的错误 我的代码如下并打印“远程服务器返回错误时创建的响应:(403)禁止。” 感谢您的帮助。使用System.Net.CookieC

我正在尝试向服务器生成HttpWebRequest。我已经测试了我正在使用的用户名和密码,它们使用目标网站上的登录表单进行了正确的身份验证

我查看并阅读了Stack上关于403的所有其他帖子,这些帖子涉及HttpWebRequest,我更新了我的代码,使其具有有效的useragent、Accept字段和ContentType。忽略前三个属性中的一个似乎是人们最常犯的错误

我的代码如下并打印“远程服务器返回错误时创建的响应:(403)禁止。”


感谢您的帮助。

使用
System.Net.CookieContainer
在后续呼叫中接收和设置cookie。
CookieContainer
属性在不同的请求中是有状态的

是MSDN文档

public SomeClass 
{
    var _cookies = new CookieContainer();

    private HttpWebRequest buildRequest(String url)  
    {  
       HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);  
       req.CookieContainer = _cookies;
       // omitted rest of code
    }

}

您确定网站在登录时没有使用POST方法吗?如果没有,那就忽略这个答案

如果网站在提交数据时使用POST方法,则您需要在提交数据之前将数据附加到请求的末尾(您可以很容易地使用Fiddler进行检查):


恐怕我不明白。据我所知,我没有询问任何有关cookies的问题。您是否使用普通浏览器和您的代码检查实际请求及其内容?是的,我是否应该在请求中查找任何特定内容?我的请求似乎包含编码的用户名/密码组合。正常的webbrowser登录会收到多少请求和响应?它包括401优先吗?里面有响应Cookies吗?他们在接下来的通话中出现了吗?共有4个回复,其中不包括401,并且在任何通话中都没有cookies。感谢您的回复,但我知道网站没有使用POST方法来完成我的尝试。我没有尝试登录,我只是尝试验证GET命令以从服务器获取一些json。啊。根据雷内的建议,你可能不得不走饼干路线。如果在使用web浏览器时,您必须先登录才能访问数据,那么您可能必须先通过程序登录才能获取Cookie。再说一次,如果是不一样的话,别介意我。只是提出一些建议:)
public SomeClass 
{
    var _cookies = new CookieContainer();

    private HttpWebRequest buildRequest(String url)  
    {  
       HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);  
       req.CookieContainer = _cookies;
       // omitted rest of code
    }

}
string postDataString = "foo1=bar1&foo2=bar2&foo3=bar3";
//Use whatever encoding is appropriate for the submission
byte[] postData = Encoding.ASCII.GetBytes(postDataString);


//When building your request, set the ContentLength property and append the data
req.ContentLength = postData.Length;

using (Stream dataStream = req.GetRequestStream())
{
    dataStream.Write(postData, 0, postData.Length);
}