在.Net 2.0中,如何在使用WebRequest时禁止AutoRedirect?我发现一些源代码在那里使用了AllowAutoRedirect属性,但在我的WebRequest上没有这样的属性.
我目前正在使用SpicIE开发一个IE插件.
这个插件做了一些网页抓取,类似于MSDN上发布的示例:
WebRequest request = WebRequest.Create ("http://www.contoso.com/default.html");
request.Credentials = CredentialCache.DefaultCredentials;
HttpWebResponse response = (HttpWebResponse)request.GetResponse ();
Stream dataStream = response.GetResponseStream ();
StreamReader reader = new StreamReader (dataStream);
string responseFromServer = reader.ReadToEnd ();
reader.Close ();
dataStream.Close ();
response.Close ();
Run Code Online (Sandbox Code Playgroud)
但是,当我运行此代码时,我收到以下错误消息:
远程服务器返回错误:(407)需要代理身份验证.
我目前正在代理服务器后面工作,并使用NetworkCredential类手动提供我的网络凭据
request.Credentials = new System.Net.NetworkCredential("name", "password", "domain");
Run Code Online (Sandbox Code Playgroud)
但我仍然收到同样的错误.
即使我的问题解决了,我知道该插件的一些用户将在代理服务器后面.
我想知道如何获取IE凭据并在我的代码中使用它来将其分配给request.Credentials.
也许是这样的:
request.Credentials = IE.DefaultCredentials;
Run Code Online (Sandbox Code Playgroud) 差不多......我想做这样的事情:
Stream Answer = WebResp.GetResponseStream();
Response.OutputStream = Answer;
Run Code Online (Sandbox Code Playgroud)
这可能吗?
我使用HttpWebRequest使用以下代码读取网页:
var pageurl = new Uri(url, UriKind.Absolute);
var request = (HttpWebRequest)WebRequest.Create(pageurl);
request.Method = "GET";
request.AutomaticDecompression = DecompressionMethods.GZip;
request.KeepAlive = false;
request.ConnectionGroupName = Guid.NewGuid().ToString();
request.ServicePoint.Expect100Continue = false;
request.Pipelined = false;
request.MaximumResponseHeadersLength = 4;
if (ignoreCertificateErrors)
{
ServicePointManager.ServerCertificateValidationCallback += AcceptAllCertificatePolicy;
}
var response = (HttpWebResponse)request.GetResponse();
if (response != null)
{
using (var reader = new StreamReader(response.GetResponseStream()))
{
return reader.ReadToEnd();
}
}
Run Code Online (Sandbox Code Playgroud)
当传递的语言是英语时,这种方法非常有效,但当其他语言如西班牙语时,我会在返回的内容中获得大量的 .
代码是否有问题,或者是否存在我缺少的编码方式?
我正在尝试为Monotouch编写一些代码,这些代码与REST API接口,REST API依赖于正确设置的Accept标头.如果我尝试在Monotouch中执行此操作,我会收到以下消息:
Type 'System.Net.WebRequest' does not contain a definition for 'Request'...
Run Code Online (Sandbox Code Playgroud)
尽管该属性出现在API文档中.
这是我与Monotouch的第一天,所以也许我错过了一些明显的东西......有什么想法吗?
我从WebRequest获取以下XML:
<?xml version="1.0" encoding="UTF-8"?>
<search>
<total_items>5</total_items>
<page_size>10</page_size>
<page_count>1</page_count>
<page_number>1</page_number>
<page_items></page_items>
<first_item></first_item>
<last_item></last_item>
<search_time>0.044</search_time>
<events>
<event id="E0-001-053379749-0">
<title>Antibalas</title>
<url>http://test.com</url>
<description>stuff</description>
<start_time>2013-01-30 20:00:00</start_time>
<stop_time></stop_time>
<tz_id></tz_id>
<tz_olson_path></tz_olson_path>
<tz_country></tz_country>
<tz_city></tz_city>
<venue_id>V0-001-000189211-5</venue_id>
<venue_url>http://blah.com</venue_url>
<venue_name>Troubadour</venue_name>
<venue_display>1</venue_display>
<venue_address>9081 Santa Monica Boulevard</venue_address>
<city_name>West Hollywood</city_name>
<region_name>California</region_name>
<region_abbr>CA</region_abbr>
<postal_code>90069</postal_code>
<country_name>United States</country_name>
<country_abbr2>US</country_abbr2>
<country_abbr>USA</country_abbr>
<latitude>34.0815917</latitude>
<longitude>-118.3892462</longitude>
<geocode_type>EVDB Geocoder</geocode_type>
<all_day>0</all_day>
<recur_string></recur_string>
<calendar_count></calendar_count>
<comment_count></comment_count>
<link_count></link_count>
<going_count></going_count>
<watching_count></watching_count>
<created>2012-12-24 11:40:43</created>
<owner>evdb</owner>
<modified>2013-01-14 21:08:04</modified>
<performers>
<performer>
<id>P0-001-000000517-4</id>
<url>http://test.com</url>
<name>Antibalas</name>
<short_bio>Afro-beat / Funk / Experimental</short_bio>
<creator>jfisher</creator>
<linker>evdb</linker>
</performer>
</performers>
<image>
<url>http://s4.evcdn.com/images/small/I0-001/000/070/311-5.jpeg_/antibalas-11.jpeg</url>
<width>48</width>
<height>48</height>
<caption></caption>
<thumb>
<url>http://s4.evcdn.com/images/thumb/I0-001/000/070/311-5.jpeg_/antibalas-11.jpeg</url> …Run Code Online (Sandbox Code Playgroud) 所以我正在制作一个几乎可以制作批量HttpWebRequests的程序.在这个程序中,速度是主要的.如果我能找到将HttpWebRequests增加甚至毫秒的方法,那就非常好了.
好的,我的问题是这样的:我有一个方法对一个站点发出HttpWebRequest(GET请求),另一个方法是对一个主机发出一个POST HttpWebRequest(略有不同的URL,但是同一个主机),这个方法叫做AFTER每隔一段时间使用第一种方法.
在我的第一个方法(GET请求,假设方法A)中,我在读取响应主体后关闭了WebResponse.让这个WebResponse保持打开状态,然后调用POST方法(让我们说方法B),或者我应该如何实现它,从方法A关闭WebResponse是不是更快?
示例代码:
public string MethodA()
{
// Make a HttpWebRequest to a URL like: xxxx.yyyy.com
WebResponse response = request.GetResponse();
string x = ReadResponseBody(response);
response.Close();
if(x.Contains("something"))
MethodB();
}
public void MethodB()
{
// Make a POST HttpWebRequest to a URL like: xxxx.zzzz.com (same host).
WebResponse response = request.GetResponse();
response.Close();
}
Run Code Online (Sandbox Code Playgroud)
那么,我应该保留我的代码,关闭MethodA()中的第一个WebResponse,然后调用MethodB(),还是其他什么?
此外,任何人都可以提供一些关于如何提高速度的提示,因为这是我的程序中最重要的事情,我需要尽可能快.
curl -X POST 'https://api.twilio.com/2010-04-01/Accounts/AC053acaaf55d75ef32233132196e/Messages.json' \
--data-urlencode 'To=5555555555' \
--data-urlencode 'From=+15555555555' \
--data-urlencode 'Body=Test' \
-u AC053acaaf55d75a393498192382196e:[AuthToken]
Run Code Online (Sandbox Code Playgroud)
我有上面的卷曲代码,我需要连接到的API.问题是我需要使用ASP.NET(C#)进行连接.我对ASP.NET不是很熟悉,也不知道从哪里开始.我知道如何在PHP中编写代码,但ASP.NET是另一回事.从我所做的研究中我需要使用WebRequest.如何输入请求的发布数据和authtoken(-u AC053acaaf55d75a393498192382196e:[AuthToken])部分.
string url = "https://api.twilio.com/2010-04-01/Accounts/AC053acaaf55d75ef32233132196e/Messages.json";
WebRequest myReq = WebRequest.Create(url);
myReq.Method = "POST";
Run Code Online (Sandbox Code Playgroud) 我正在查看之间的文档,WebRequest.Create并WebRequest.CreateHttp确定应在应用程序中使用哪个文档。我看不到这两个方法之间有什么不同,除了WebRequest.Createreturn a WebRequest和WebRequest.CreateHttpreturn HttpWebRequest。
除了返回值外,这两种方法是否基本相同?还是他们每个人在内部做不同的事情?
我在restsharp客户端中发现了一些性能问题,我在函数PerformanceRequest2中使用RestSharp向一些非常好的API发送请求,并在PerformRequest中使用WebRequest使用普通的.net请求
PerformRequest的平均响应时间是75毫秒,而使用RestSharp的PerformRequest2是300毫秒.这是restsharp的一些限制,还是我们使用restsharp的方式做错了
private static void PerformRequest2(string requestData)
{
var request = JsonConvert.DeserializeObject<ComplexClass>(requestData);
var client2 = new RestClient("URL");
var restRequest = new RestRequest();
restRequest.Method = Method.PUT;
restRequest.AddHeader("Content-Type", "application/json");
restRequest.AddHeader("Authorization", string.Format("Bearer {0}", token));
restRequest.AddJsonBody(request);
var restResponse2 = client2.Execute(restRequest);
if (restResponse2.StatusCode != HttpStatusCode.OK)
{
throw new Exception("error");
}
}
private static void PerformRequest(string requestData)
{
var request = JsonConvert.DeserializeObject<ComplexClass>(requestData);
var webRequest =
WebRequest.Create("URL");
webRequest.ContentType = "application/json";
webRequest.Method = "PUT";
webRequest.Headers.Add(HttpRequestHeader.Authorization, string.Format("Bearer {0}", token));
using (var streamWriter = new StreamWriter(webRequest.GetRequestStream()))
{
streamWriter.Write(JsonConvert.SerializeObject(request));
streamWriter.Flush();
} …Run Code Online (Sandbox Code Playgroud) c# ×10
webrequest ×10
asp.net ×2
.net ×1
.net-2.0 ×1
curl ×1
mono ×1
php ×1
restsharp ×1
sockets ×1
webresponse ×1
xamarin.ios ×1
xml ×1