标签: webrequest

在c#中多线程处理大量Web请求

我有一个程序,我需要在外部sharepoint站点创建一些大量的文件夹(外部意思是我不能使用sharepoint对象模型).Web请求适用于此,但只需一次执行一个(发送请求,等待响应,重复)相当慢.我决定多线程化请求,尝试加快速度.该程序已大大加快,但经过一段时间(1-2分钟左右)后,并发异常开始被抛出.

代码在下面,这是最好的方法吗?

Semaphore Lock = new Semaphore(10, 10);
List<string> folderPathList = new List<string>();
//folderPathList populated

foreach (string folderPath in folderPathList)
{
    Lock.WaitOne();
    new Thread(delegate()
    {
        WebRequest request = WebRequest.Create(folderPath);
        request.Credentials = DefaultCredentials;
        request.Method = "MKCOL";

        WebResponse response = request.GetResponse();
        response.Close();
        Lock.Release();
    }).Start();
}
for(int i = 1;i <= 10;i++)
{
    Lock.WaitOne();
}
Run Code Online (Sandbox Code Playgroud)

例外情况是这样的

未处理的异常:System.Net.WebException:无法连接到远程服务器---> System.Net.Sockets.SocketException:System.Net.Sockets通常只允许192.0.0.1:81使用每个套接字地址的一个用法
.
System.Net.SService.ConnectSocketInternal上的System.Net.Sockets.Socket.InternalConnect(EndPoint remoteEP)
中的Socket.DoConnect(EndPoint endPointSnapshot,SocketAddre ss socketAddress)(布尔值connectFailure,套接字s4,套接字s6,套接字和套接字,IPAddress和地址,ConnectSocketState state,IAsyncResult asyncResult,Int32 timeout,Exception&exception)

c# multithreading webrequest

23
推荐指数
2
解决办法
2万
查看次数

如何正确捕获.NET中的404错误

可能重复:
我怎样才能抓到404?

我想知道用c#asp.net捕获404错误的正确方法这里是我正在使用的代码

HttpWebRequest request = (HttpWebRequest) WebRequest.Create(String.Format("http://www.gravatar.com/avatar/{0}?d=404", hashe));

// execute the request
try
{
    //TODO: test for good connectivity first
    //So it will not update the whole database with bad avatars
    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    Response.Write("has avatar");
}
catch (Exception ex)
{
    if (ex.ToString().Contains("404"))
    {
         Response.Write("No avatar");
    }
}
Run Code Online (Sandbox Code Playgroud)

这段代码有效,但我想知道这是否最有效.

c# webrequest

21
推荐指数
0
解决办法
2万
查看次数

在.NET中使用httpWebRequest时"尝试了太多自动重定向"错误消息

我正在尝试使用vb.net中的webrequest类请求" http://www.google.com/?q=random " 这样的页面.我们在防火墙后面,所以我们必须验证我们的请求.我通过添加我的凭据已经通过了身份验证部分.但是一旦它起作用,它似乎进入了一个重定向循环.

有没有人有想法,评论,建议为什么这是?还有其他人遇到过这个问题吗?

Dim loHttp As HttpWebRequest =  CType(WebRequest.Create(_url), HttpWebRequest)
loHttp.Timeout = 10000
loHttp.Method = "GET"
loHttp.KeepAlive = True
loHttp.AllowAutoRedirect = True
loHttp.PreAuthenticate = True
Dim _cred1 As NetworkCredential = ... //this is setup
//snip out this stuff
loHttp.Credentials = _cc
loWebResponse = loHttp.GetResponse()
Run Code Online (Sandbox Code Playgroud)

.net vb.net webrequest httpwebrequest

19
推荐指数
2
解决办法
2万
查看次数

如何使用WebRequest来发布一些数据并读取响应?

需要让服务器对API进行POST,如何将POST值添加到WebRequest对象以及如何发送它并获得响应(它将是一个字符串)?

我需要POST两个值,有时候更多,我在这些例子中看到它表示字符串postData ="要发布的字符串"; 但是我怎么让我发布的东西知道有多个表单值?

c# asp.net webrequest

19
推荐指数
2
解决办法
10万
查看次数

如何使用HttpWebRequest进行摘要式身份验证?

各种物品(1,2)我发现让这个看起来很容易:

WebRequest request = HttpWebRequest.Create(url);

var credentialCache = new CredentialCache();
credentialCache.Add(
  new Uri(url), // request url
  "Digest", // authentication type
  new NetworkCredential("user", "password") // credentials
);

request.Credentials = credentialCache;
Run Code Online (Sandbox Code Playgroud)

但是,这仅适用于没有URL参数的URL.例如,我可以下载http://example.com/test/xyz.html得很好,但是当我尝试下载时http://example.com/test?page=xyz,结果是400 Bad Request消息,服务器日志中包含以下内容(运行Apache 2.2):

Digest: uri mismatch - </test> does not match request-uri </test?page=xyz>
Run Code Online (Sandbox Code Playgroud)

我的第一个想法是摘要规范要求从摘要哈希中删除URL参数 - 但是从传递给的URL中删除参数credentialCache.Add()并没有改变事物.所以它必须是相反的方式,在.NET框架中的某个地方错误地从URL中删除参数.

c# authentication webrequest httpwebrequest digest

19
推荐指数
3
解决办法
2万
查看次数

是什么让这个HTTPS WebRequest即使在浏览器中运行也会超时?

这是我的要求:

var request = (HttpWebRequest) WebRequest.Create("https://mtgox.com/");
request.CookieContainer = new CookieContainer();
request.AllowAutoRedirect = false;
request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
request.Headers[HttpRequestHeader.AcceptEncoding] = "gzip, deflate";
request.Headers[HttpRequestHeader.AcceptLanguage] = "en-gb,en;q=0.5";
request.Headers[HttpRequestHeader.AcceptCharset] = "ISO-8859-1,utf-8;q=0.7,*;q=0.7";
request.Timeout = 5000;
request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0) Gecko/20100101 Firefox/4.0";
request.Method = "GET";

request.GetResponse();
Run Code Online (Sandbox Code Playgroud)

使用HttpFox从Firefox复制标题.我使用Fiddler2验证至少对于HTTP请求,标头在Firefox请求和我的请求之间是完全相同的.

但是,当使用HTTPS 对此特定网站执行请求时,请求会超时.它适用于其他网站.

我必须以不同的方式对Firefox执行,因为它始终适用于Firefox.但是,我无法使用Fiddler2调试它,因为每当Fiddler2转发这些请求时,它们也会超时,即使是由Firefox发起的.

它只是一个非常错误的网站吗?上面的哪一部分让我不喜欢Firefox?

.net c# https webrequest httpwebrequest

19
推荐指数
3
解决办法
2万
查看次数

我的C#应用​​程序中的带宽整形

我有一个C#应用程序,它使用本地库,使用UDP通过Internet将视频发送到其他IP.我对该库没有流量控制.

我的应用程序还调用另一台服务器的Web服务,使用WebRequest我可以控制它们.

问题是:

当我的互联网带宽较低时,视频流会占用我所有的带宽.因此,在此期间我无法获得我的Web服务方法的响应.

有没有办法优先考虑WebRequest或为他们节省一些带宽,以便我可以安全地获得响应?

c# trafficshaping bandwidth webrequest low-bandwidth

18
推荐指数
1
解决办法
650
查看次数

如何强制WebRequest在POST期间发送授权标头

使用WebRequest发送POST时,即使我手动设置了标头并将PreAuthenticate设置为true,也不会随请求一起发送Authorization标头,例如:

webRequest.Headers["Authorization"] = "OAuth oauth_consumer_key=bFPD...";
webRequest.PreAuthenticate = true;
Run Code Online (Sandbox Code Playgroud)

使用Fiddler我可以看到没有发送Authorization标头.目标站点(Twitter)返回400(错误请求)而不是401(未授权),因此WebRequest发送授权数据所需的错误挑战.有关信息,返回的内容是:

{"errors":[{"message":"Bad Authentication data","code":215}]}
Run Code Online (Sandbox Code Playgroud)

那么,我该如何解决这个问题呢?如何强制WebRequest在初始请求时发送授权?请注意,授权数据不是基本身份验证,而是OAuth字符串.

谢谢

.net twitter http webrequest

17
推荐指数
3
解决办法
7万
查看次数

如何计算HttpWebRequest花费的出站和入站互联网流量

我有以下功能来获取页面.我的问题是我想计算一下互联网连接的数量

入站(下载)和出站流量(已发送)

我怎样才能做到这一点 ?谢谢

我的功能

 public static string func_fetch_Page(string srUrl, int irTimeOut = 60,
    string srRequestUserAgent = "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0",
    string srProxy = null)
    {
        string srBody = "";
        string srResult = "";
        try
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(srUrl);

            request.Timeout = irTimeOut * 1000;
            request.UserAgent = srRequestUserAgent;
            request.KeepAlive = true;
            request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";

            WebHeaderCollection myWebHeaderCollection = request.Headers;
            myWebHeaderCollection.Add("Accept-Language", "en-gb,en;q=0.5");
            myWebHeaderCollection.Add("Accept-Encoding", "gzip, deflate");

            request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;

            using (WebResponse response = request.GetResponse())
            {
                using (Stream …
Run Code Online (Sandbox Code Playgroud)

c# wpf webrequest httpwebrequest network-traffic

17
推荐指数
2
解决办法
1823
查看次数

如何从c#获取网站标题

我正在重新审视我的旧代码,并且偶然发现了一种基于其网址获取网站标题的方法.这并不是你所谓的稳定方法,因为它经常无法产生结果,有时甚至会产生不正确的结果.此外,有时它无法显示标题中的某些字符,因为它们是替代编码.

有没有人对这个旧版本有改进建议?

public static string SuggestTitle(string url, int timeout)
{
    WebResponse response = null;
    string line = string.Empty;

    try
    {
        WebRequest request = WebRequest.Create(url);
        request.Timeout = timeout;

        response = request.GetResponse();
        Stream streamReceive = response.GetResponseStream();
        Encoding encoding = System.Text.Encoding.GetEncoding("utf-8");
        StreamReader streamRead = new System.IO.StreamReader(streamReceive, encoding);

        while(streamRead.EndOfStream != true)
        {
            line = streamRead.ReadLine();
            if (line.Contains("<title>"))
            {
                line = line.Split(new char[] { '<', '>' })[2];
                break;
            }
        }
    }
    catch (Exception) { }
    finally
    {
        if (response != null)
        {
            response.Close();
        }
    } …
Run Code Online (Sandbox Code Playgroud)

c# webrequest

16
推荐指数
2
解决办法
2万
查看次数