我正在尝试通过我的应用程序登录网站.我做了什么:
首先,我弄清楚浏览器如何使用Fiddler执行授权过程.我检查了如何构建POST请求,并尝试重建它.浏览器发送4个Cookie(Google Analytics),我尝试设置它们:
CookieContainer gaCookies = new CookieContainer();
gaCookies.Add(new Cookie("__utma", "#########.###########.##########.##########.##########.#"));
gaCookies.Add(new Cookie("__utmb", "#########.#.##.##########"));
gaCookies.Add(new Cookie("__utmc", "#########"));
gaCookies.Add(new Cookie("__utmz", "#########.##########.#.#.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)"));
Run Code Online (Sandbox Code Playgroud)
(刚用#替换了原始的cookie数据)
然后我用调试器完成了代码,一旦第一个gaCookies.Add被执行,应用程序就停止了
System.ArgumentException: The parameter '{0}' cannot be an empty string. Parameter name: cookie.Domain
Run Code Online (Sandbox Code Playgroud)
我想知道为什么会这样.Cookie的构造函数不需要域,我不知道在哪里可以得到这个值?
如果你们中的某个人可以帮助我,那将是非常好的.
我不是网络开发者或网络专家,所以我不太了解它.
如果没有"简短快速的答案",我是否可以从中获悉这一点?
HttpWebRequest自动附加Expect: 100-continuePOST请求的标头.互联网上的各种消息来源表明,这可以被禁用如下:
System.Net.ServicePointManager.Expect100Continue = false;
Run Code Online (Sandbox Code Playgroud)
但是,我正在编写一个库,我不能为整个appdomain禁用它,以防应用程序依赖于此行为.我也不能假设它将保持设定为此值.如何针对特定请求禁用它?
为什么以下代码超时运行它的第二个(及后续)时间?
代码挂起:
using (Stream objStream = request.GetResponse().GetResponseStream())
Run Code Online (Sandbox Code Playgroud)
然后导致WebException表示请求已超时.
我试过这个用WebRequest和HttpWebRequest
编辑:似乎代码正在崩溃 request.GetResponse()
编辑:这篇文章表明它可能是一个GC问题 - > http://www.vbforums.com/showthread.php?t=610043 - 根据这篇文章,如果Fiddler在后台打开,问题就会得到缓解.
服务器在那里并可用于请求.
private string GetQLMResponse(string URL)
{
HttpWebRequest request = WebRequest.Create(URL) as HttpWebRequest;
request.Credentials = new NetworkCredential(Settings.Default.LicenseUser, Settings.Default.LicensePassword);
request.KeepAlive = false;
request.Timeout = 5000;
request.Proxy = null;
// Read stream
string responseString = String.Empty;
try
{
using (var response = request.GetResponse())
{
using (Stream objStream = response.GetResponseStream())
{
using (StreamReader objReader = new StreamReader(objStream))
{
responseString = objReader.ReadToEnd();
objReader.Close();
}
objStream.Flush(); …Run Code Online (Sandbox Code Playgroud) 我尝试使用HttpWebRequest访问某些链接的任何想法我得到"远程服务器返回错误:(304)未修改." 在代码中?
我正在使用的代码来自Jeff的帖子(该页面似乎已经消失,请在Wayback Machine上查看归档副本).
注意代码的概念是一个简单的代理服务器,因此我将浏览器指向这个本地运行的代码片段,它获取我的浏览器请求,然后通过创建新的HttpWebRequest代理它,如您所见代码.它适用于大多数网站/链接,但对于一些人来说,这个错误出现了.您将在代码中看到一个关键位,它似乎将http标头设置从浏览器请求复制到它的请求到网站,并在标头属性中复制.不确定问题是否与它如何模仿请求的这个方面有关,然后结果会发生什么?
case "If-Modified-Since":
request.IfModifiedSince = DateTime.Parse(listenerContext.Request.Headers[key]);
break;
Run Code Online (Sandbox Code Playgroud)
我从例如http://en.wikipedia.org/wiki/Main_Page获得了该问题
PS.更新在这里
仍然无法解决这个问题.基本上我可以识别1个有问题的链接,它似乎工作正常,第二次得到错误,第3次OK,第4次得到错误,第5次OK等等好像有一些状态没有被清除或代码中有些东西.我尝试使用"使用"类型语句等来清理代码.
这是代码.如果有人能够发现为什么我每次第二次浏览http://newsimg.bbc.co.uk/css/screen/1_0_16/nol/v4/story.css这样的链接(从第2次开始,而不是第一次)通过这个代理代码,我得到了我想听到的错误.
class Program
{
static void Main(string[] args)
{
Proxy p = new Proxy(8080);
Thread proxythread = new Thread(new ThreadStart(p.Start));
proxythread.Start();
Console.WriteLine("Proxy Started. Press Any Key To Stop...");
Console.ReadKey();
p.Stop();
}
}
public class Proxy
{
private HttpListener _listener;
private int _port;
public Proxy(int port)
{
int defaultport = 8080;
// Setup Thread Pool
System.Threading.ThreadPool.SetMaxThreads(50, 1000); …Run Code Online (Sandbox Code Playgroud) 我需要从webservice调用一个方法,所以我写了这段代码:
private string urlPath = "http://xxx.xxx.xxx/manager/";
string request = urlPath + "index.php/org/get_org_form";
WebRequest webRequest = WebRequest.Create(request);
webRequest.Method = "POST";
webRequest.ContentType = "application/x-www-form-urlencoded";
webRequest.
webRequest.ContentLength = 0;
WebResponse webResponse = webRequest.GetResponse();
Run Code Online (Sandbox Code Playgroud)
但是这种方法需要一些参数,如下所示:
发布数据:
_username:'API USER', // api authentication username
_password:'API PASSWORD', // api authentication password
Run Code Online (Sandbox Code Playgroud)
如何将这些参数添加到此Webrequest中?
提前致谢.
我正在使用需要身份验证的代理,即在浏览器中如果我尝试打开页面,它会立即请求凭据.我在我的程序中提供了相同的凭据,但它因HTTP 407错误而失败.
这是我的代码:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL);
IWebProxy proxy = WebRequest.GetSystemWebProxy();
CredentialCache cc = new CredentialCache();
NetworkCredential nc = new NetworkCredential();
nc.UserName = "userName";
nc.Password = "password";
nc.Domain = "mydomain";
cc.Add("http://20.154.23.100", 8888, "Basic", nc);
proxy.Credentials = cc;
//proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;
request.Proxy = proxy;
request.Proxy.Credentials = cc;
request.Credentials = cc;
request.PreAuthenticate = true;
Run Code Online (Sandbox Code Playgroud)
我尝试了所有可能的事情,但似乎我错过了一些东西.是这样的,我必须提出两个要求吗?首先没有凭据,一旦我从服务器收到有关凭据需求的回复,请使用凭据进行相同的请求?
c# proxy httpwebrequest basic-authentication http-status-code-407
我试图使用WebClient/HttpWebRequest从服务器下载一些数据.我使用以下代码来执行此操作:
WebClient client = new WebClient();
client.Credentials = new NetworkCredential("admin", "password");
Stream datastream = client.OpenRead("http://routerlogin.com/cgi-bin/CF_logs.html");
StreamReader reader = new StreamReader(datastream);
Run Code Online (Sandbox Code Playgroud)
服务器是我的页面在路由器的配置中.它可以在浏览器中正常工作,但是当使用我的代码下载时,它会抛出一条WebException消息
服务器提交了协议违规.Section = ResponseHeader Detail = CR必须后跟LF,在WinForms?中.
我找到了一个解决方案,如果他们使用ASP.net,可以使用,将以下内容添加到web.config:
<configuration>
<system.net>
<settings>
<httpWebRequest useUnsafeHeaderParsing="true" />
</settings>
</system.net>
</configuration>
Run Code Online (Sandbox Code Playgroud)
但是,我正在制作一个WinForms应用程序,所以这对我不起作用.有什么替代方法可以解决这个问题?
c# webclient httpwebrequest system.net.webexception winforms
有什么方法可以将Fiddler捕获到使用.NET HttpWebRequest和HttpWebResponse捕获请求和响应吗?
我想在这里调试来自另一个问题的 HTTP请求的错误.所以我读了一下Fiddler,想用它来调试我的问题.但我似乎无法通过我的WPF应用程序获得通过Fiddler的流量.我相信我需要配置一个代理.我使用WebClient作为基本示例,但我想我稍后会需要WebRequest.但是现在,通过一个简单的WebClient,我怎样才能让它通过Fiddler(我相信我必须将代理设置为localhost:8888)?
更新:
我不知道我是否做对了,但我试过了
var wc = new WebClient();
WebProxy proxy = new WebProxy();
proxy.Address = new Uri("http://localhost:8888");
wc.Proxy = proxy;
Run Code Online (Sandbox Code Playgroud)
但失败了 - 我在Fiddler看不到任何交通
我试过了 ...
var wc = new WebClient();
WebProxy proxy = new WebProxy("127.0.0.1", 8888);
wc.Proxy = proxy;
Run Code Online (Sandbox Code Playgroud)
依然没有
httpwebrequest ×10
c# ×8
.net ×3
fiddler ×2
http ×2
webclient ×2
webrequest ×2
cookies ×1
get ×1
proxy ×1
web-services ×1
winforms ×1
wpf ×1