gpt4 book ai didi

c# - HttpClient Post 仅在 fiddler 运行时有效

转载 作者:行者123 更新时间:2023-11-30 12:29:14 24 4
gpt4 key购买 nike

public async Task<LoginResult> Login(string username, string password)
{
cookies = new CookieContainer();
handler = new HttpClientHandler()
{
CookieContainer = cookies,
UseCookies = true,
AllowAutoRedirect = true,
UseProxy = true,
Proxy = null
};
ThreadActivity.Account = username;
ThreadActivity.Status = "Logging in...";
LoginResult result = new LoginResult();
try
{
cookies = new CookieContainer();
client = new HttpClient(handler);
client.DefaultRequestHeaders.Connection.Add("keep-alive");
client.DefaultRequestHeaders.CacheControl = new CacheControlHeaderValue() { MaxAge = TimeSpan.Zero };
client.DefaultRequestHeaders.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
client.DefaultRequestHeaders.Add("Accept-Encoding", "gzip,deflate,sdch");
client.DefaultRequestHeaders.Add("Accept-Language", "en-US,en;q=0.8");
client.DefaultRequestHeaders.Add("Accept-Charset", "ISO-8859-1");
client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.76 Safari/537.36");

HttpResponseMessage hr = await client.GetAsync("https://instagram.com/accounts/login/#");
if (!hr.IsSuccessStatusCode)
throw new Exception("Couldn't load instagram page; " + hr.ReasonPhrase);
string source = await hr.Content.ReadAsStringAsync();
//Get login token
string token = ParseFormNameText(source, "csrfmiddlewaretoken");
//Login
HttpContent content = new FormUrlEncodedContent(new[]
{
new KeyValuePair<string,string>("csrfmiddlewaretoken", token),
new KeyValuePair<string, string>("username", username),
new KeyValuePair<string, string>("password", password)
});
client.DefaultRequestHeaders.Referrer = new Uri("https://instagram.com/accounts/login/");
hr = await client.PostAsync("https://instagram.com/accounts/login/", content);
if (!hr.IsSuccessStatusCode)
throw new Exception("Couldn't submit login; " + hr.ReasonPhrase);
source = await hr.Content.ReadAsStringAsync();
if (source.Contains("Please enter a correct username and password"))
throw new Exception("Couldn't login; invalid username/password.");
//Logged in, login to webstagram now
hr = await client.GetAsync("https://instagram.com/oauth/authorize/?client_id=9d836570317f4c18bca0db6d2ac38e29&redirect_uri=http://web.stagram.com/&response_type=code&scope=likes+comments+relationships");
if (!hr.IsSuccessStatusCode)
throw new Exception("Couldn't load webstagram login; " + hr.ReasonPhrase);
source = await hr.Content.ReadAsStringAsync();
if (!source.Contains(">LOG OUT</a>"))
throw new Exception("Couldn't load webstagram; failed to login.");
RaiseEvent("Logged in!", this);
}
catch (Exception ex)
{
RaiseEvent(ex.Message, this);
result.ErrorMessage = ex.Message;
}
finally
{
result.Success = string.IsNullOrEmpty(result.ErrorMessage);
}
return result;
}

这是我的登录方法,但是当它实际尝试提交登录时,我收到 403 禁止错误。但是当我尝试在运行 Fiddler 的情况下执行此操作时,它起作用了。

我不太清楚为什么要这样做,也许有人可以帮忙?

最佳答案

我曾经遇到过类似的问题。问题是 Fiddler 在拦截流量时更改了请求。我认为在我们的案例中,代理服务器被配置为阻止这样的请求(ASP.net 请求,失败)“CONNECT www.20min.ch”,Fiddler 将请求更改为“CONNECT http://www.20min.ch”,允许通过代理(工作)。也许您需要使用 Wireshark 来比较来自 Fiddler 和 ASP.net 的请求,并寻找它们之间的差异。

关于c# - HttpClient Post 仅在 fiddler 运行时有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19067668/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com