我正在尝试通过我的应用程序登录网站.我做了什么:
首先,我弄清楚浏览器如何使用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的构造函数不需要域,我不知道在哪里可以得到这个值?
如果你们中的某个人可以帮助我,那将是非常好的.
我不是网络开发者或网络专家,所以我不太了解它.
如果没有"简短快速的答案",我是否可以从中获悉这一点?
为什么以下代码超时运行它的第二个(及后续)时间?
代码挂起:
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) 我正在用C#编写一个小工具,它需要使用POST和json格式向网站发送数据和从网站接收数据.我以前从未在C#(或任何语言)中做过这样的事情,所以我很难找到一些有用的信息让我开始.
我在C#中找到了一些关于WebRequest类的信息(特别是从这里开始),但在我开始深入研究之前,我想知道这是否适合这项工作.
我发现有很多工具可以将数据转换为json格式,但其他方面并不多,所以任何信息在这里都会非常有用,以防我最终陷入死胡同.
我正在尝试使用.net中的WebRequest类向网页发出请求.我尝试阅读的网址需要Windows身份验证,因此我会收到未经授权的异常.如何将Windows凭据传递给此请求以便进行身份验证.
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create( "http://myapp/home.aspx" );
request.Method = "GET";
request.UseDefaultCredentials = false;
request.PreAuthenticate = true;
request.Credentials = new NetworkCredential( "username", "password", "domain" );
HttpWebResponse response = (HttpWebResponse)request.GetResponse(); // Raises Unauthorized Exception
this.Response.Write( response.StatusCode );
Run Code Online (Sandbox Code Playgroud)
上面的代码返回以下错误.
System.Net.WebException: The remote server returned an error: (401) Unauthorized.
Run Code Online (Sandbox Code Playgroud)
检查异常细节时,我注意到一件事是我尝试访问的URL是重定向到另一个提示我提供NT登录详细信息的URL.我相信凭据也应该转发到此URL.但显然它没有发生.
我终于开始讨论创建一些与RESTful Web界面一起使用的应用程序,但是,我担心每次按F5运行一系列测试时我都在锤击他们的服务器.
基本上,我需要获得一系列的Web响应,以便我可以测试我正确解析变化的响应,而不是每次都打到它们的服务器,我想我可以这样做一次,保存XML然后在本地工作.
但是,我不知道如何"模拟"WebResponse,因为(AFAIK)它们只能由WebRequest.GetResponse实例化.
你们怎么去嘲笑这种事情?你呢?我真的不喜欢我正在锤击他们的服务器的事实:SI不想过多地改变代码,但我希望有一种优雅的方式来做这件事.
Will的回答是我所需要的一记耳光,我知道我错过了一个基本点!
一旦我敲了代码,我就会粘贴一些样本.
我在创建一个BitmapImage来自MemoryStreamweb请求的png和gif字节时遇到了一些麻烦.这些字节似乎可以很好地下载,并且BitmapImage创建的对象没有问题,但是图像实际上并没有在我的UI上呈现.仅当下载的图像是png或gif类型时才会出现此问题(适用于jpeg).
以下是演示此问题的代码:
var webResponse = webRequest.GetResponse();
var stream = webResponse.GetResponseStream();
if (stream.CanRead)
{
Byte[] buffer = new Byte[webResponse.ContentLength];
stream.Read(buffer, 0, buffer.Length);
var byteStream = new System.IO.MemoryStream(buffer);
BitmapImage bi = new BitmapImage();
bi.BeginInit();
bi.DecodePixelWidth = 30;
bi.StreamSource = byteStream;
bi.EndInit();
byteStream.Close();
stream.Close();
return bi;
}
Run Code Online (Sandbox Code Playgroud)
为了测试Web请求是否正确获取字节,我尝试了以下操作,将字节保存到磁盘上的文件,然后使用a UriSource而不是a 加载图像StreamSource,它适用于所有图像类型:
var webResponse = webRequest.GetResponse();
var stream = webResponse.GetResponseStream();
if (stream.CanRead)
{
Byte[] buffer = new Byte[webResponse.ContentLength];
stream.Read(buffer, 0, buffer.Length);
string fName = "c:\\" + …Run Code Online (Sandbox Code Playgroud) 我有一个方法,使用WebRequest将文件上传到sharepoint 2010列表/文件夹,使用PUT请求,并将Overwrite Header设置为T(覆盖).
当上载多个文件(多次调用方法)时,某些请求会因409 Conflict HTTP错误而失败.
我用google搜索,似乎最常见的原因是试图影响/更新不存在的文件(比如将请求URL设置为没有文件名的路径).但事实并非如此.如果冲突与已经存在的文件有关,我在上传之前添加了代码以物理删除文件,我仍然得到一些409.
有没有人收到过这种类型的错误,如果有的话,你能告诉我你是如何修复它的,根本原因是什么?任何帮助是极大的赞赏.谢谢
我想对网站进行HTTP调用.我只需要点击URL,不想上传或下载任何数据.什么是最简单,最快速的方法.
我尝试了下面的代码,但它的速度很慢,在第二次重复请求之后,它只是进入超时时间为59秒而不是恢复:
WebRequest webRequest = WebRequest.Create("http://ussbazesspre004:9002/DREADD?" + fileName);
webRequest.Method = "POST";
webRequest.ContentType = "application/x-www-form-urlencoded";
webRequest.ContentLength = fileName.Length;
Stream os = webRequest.GetRequestStream();
os.Write(buffer, 0, buffer.Length);
os.Close();
Run Code Online (Sandbox Code Playgroud)
使用WebClient更有效率吗?
WebClient web = new WebClient();
web.UploadString(address);
Run Code Online (Sandbox Code Playgroud)
我正在使用.NET ver 3.5
我想向需要身份验证的页面发出Web请求.我该怎么做呢?我找到了一些可能使用Credentials属性的内容,但我不确定如何使用它.
当我使用WebRequest.Create(" http:// abc/test.")进行GET时,我得到404,因为根据fiddler,尾随点被.NET剥离,Web服务器需要点.我该如何防止或解决它.任何解决方法表示赞赏!
webrequest ×10
c# ×6
.net ×3
http ×2
bitmapimage ×1
cookies ×1
image ×1
memorystream ×1
rest ×1
sharepoint ×1
web-services ×1
webclient ×1
webresponse ×1
wpf ×1
xml ×1