我终于开始讨论创建一些与RESTful Web界面一起使用的应用程序,但是,我担心每次按F5运行一系列测试时我都在锤击他们的服务器.
基本上,我需要获得一系列的Web响应,以便我可以测试我正确解析变化的响应,而不是每次都打到它们的服务器,我想我可以这样做一次,保存XML然后在本地工作.
但是,我不知道如何"模拟"WebResponse,因为(AFAIK)它们只能由WebRequest.GetResponse实例化.
你们怎么去嘲笑这种事情?你呢?我真的不喜欢我正在锤击他们的服务器的事实:SI不想过多地改变代码,但我希望有一种优雅的方式来做这件事.
Will的回答是我所需要的一记耳光,我知道我错过了一个基本点!
一旦我敲了代码,我就会粘贴一些样本.
通常,使用WebRequest编写类似这样的代码来下载一些数据.
using(WebResponse resp = request.GetResponse()) // WebRequest request...
using(Stream str = resp.GetResponseStream())
; // do something with the stream str
Run Code Online (Sandbox Code Playgroud)
现在,如果抛出WebException,WebException会引用WebResponse对象,该对象可能会或可能不会调用Dispose(取决于发生异常的位置,或者响应类的实现方式) - 我不知道.
我的问题是如何处理这个问题.是否应该编写一个非常防御性的编码,并在WebException对象中处理响应(这有点奇怪,因为WebException不是IDisposable).或者是否应该忽略这一点,可能访问已处置的对象或从不处置IDisposable对象?WebException.Response的MSDN文档中给出的示例完全不合适.
我正在尝试使用.NET WebRequest/WebResponse类来访问Twitter流API "http://stream.twitter.com/spritzer.json".
我需要能够打开连接并从打开的连接中逐步读取数据.
目前,当我调用WebRequest.GetResponse方法时,它会一直阻塞,直到整个响应被下载.我知道有一种BeginGetResponse方法,但这只会在后台线程上做同样的事情.在下载仍在进行时,我需要访问响应流.对于这些类,这对我来说似乎不太可能.
Twitter文档中有关于此的具体评论:
"请注意,某些HTTP客户端库仅在服务器关闭连接后才返回响应主体.这些客户端不能用于访问Streaming API.您必须使用将以递增方式返回响应数据的HTTP客户端.最强大的HTTP客户端库将提供此功能.例如,Apache HttpClient将处理此用例."
他们指向Appache HttpClient,但这没有多大帮助,因为我需要使用.NET.
是否可以使用WebRequest/WebResponse,或者我是否必须选择较低级别的网络类?也许有其他库可以让我这样做?
艾伦
写下面的代码时,我的代码会锁定GetResponse.为什么?
try
{
WebRequest myWebRequest = WebRequest.Create(strURL);
WebResponse myWebResponse = myWebRequest.GetResponse();
//more code here
Run Code Online (Sandbox Code Playgroud) 我正在努力解决一个简单的问题.我想使用以下代码从网上下载图像:
WebRequest requestPic = WebRequest.Create(@"http://something.com/" + id + ".jpg");
WebResponse responsePic = await requestPic.GetResponseAsync();
Run Code Online (Sandbox Code Playgroud)
现在我想在StorageFile中编写WebResponse的流(例如,在应用程序的存储中创建一个文件id.jpg),但我还没有找到任何方法来实现它.我在网上搜索它,但没有成功 - 所有方式都不兼容Stream类型等等.
能否请你帮忙?
以下函数将从Twitter firehose下拉第一个X消息,但看起来像WebResponse块并且永远不会退出该函数:
public void GetStatusesFromStream(string username, string password, int nMessageCount)
{
WebRequest request = WebRequest.Create("http://stream.twitter.com/1/statuses/sample.json");
request.Credentials = new NetworkCredential(username, password);
using (WebResponse response = request.GetResponse())
{
using (var stream = response.GetResponseStream())
{
using (var reader = new StreamReader(stream))
{
while (!reader.EndOfStream)
{
Console.WriteLine(reader.ReadLine());
if (nMessageCount-- < 0)
break;
}
Console.WriteLine("Start iDispose");
}
Console.WriteLine("Never gets here!!!");
}
}
Console.WriteLine("Done - press a key to exit");
Console.ReadLine();
}
Run Code Online (Sandbox Code Playgroud)
但以下工作正常:
public void GetStatusesFromStreamOK(string username, string password, int nMessageCount)
{
byte[] encbuff = System.Text.Encoding.UTF8.GetBytes(username …Run Code Online (Sandbox Code Playgroud) 我试图发送一个获取请求并获取网页的内容.我有这些代码.
string url = "www.google.com";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse response = (HttpWebResponse)response.GetResponse();
Run Code Online (Sandbox Code Playgroud)
我从许多网站找到了这些代码并且它是正确的,但"GetResponse"给出了错误.其解释如下.
这是Visual Studio 2012的问题吗?它无法找到GetResponse方法,只是GetResponseStream在我按G时找到方法.
我试图用WebClient类做到这一点,但也找不到WebClient.是否因Visual Studio 2012而出现这些问题?或任何原因?
错误1'System.Net.HttpWebResponse'不包含'GetResponse'的定义,并且没有可以找到接受类型'System.Net.HttpWebResponse'的第一个参数的扩展方法'GetResponse'(你是否缺少using指令或者汇编参考?)C:\ Users\abidinberkay1\documents\visual studio 2012\Projects\App1\App1\BlankPage1.xaml.cs 45 66 App1
我正在开发一个项目,我们有兴趣拦截来自WebView的一些HTTP流量,然后将一些额外的标头附加到请求,然后返回并在WebView中显示它.
为此,我们使用shouldInterceptRequest(WebView视图,String URL)方法,该方法返回webview应显示的WebResourceResponse.
这是我做的:
private WebResourceResponse handleRequest(String url){
Log.d(TAG, "Intercepting request at : " + url);
HttpURLConnection connection = null;
URL serverAddress = null;
WebResourceResponse response = null;
InputStream is = null;
String type = null;
String encoding = null;
int statusCode;
int length;
try
{
//Set up the initial connection
serverAddress = new URL(url);
connection = (HttpURLConnection)serverAddress.openConnection();
// Initiate a HEAD request to get meta data
connection.setRequestMethod("HEAD");
// Let the WebView handle requests with no headers in them.
Map<String, …Run Code Online (Sandbox Code Playgroud) 我用这个代码在这里尝试调用REST控制器方法从一个Compact Framework的客户端的Web API的服务器应用程序:
public static void SendXMLFile3(string uri, string data)
{
WebRequest request = WebRequest.Create (uri);
request.Method = "POST";
string postData = data;
byte[] byteArray = Encoding.UTF8.GetBytes (postData);
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = byteArray.Length;
Stream dataStream = request.GetRequestStream ();
dataStream.Write (byteArray, 0, byteArray.Length);
dataStream.Close ();
WebResponse response = request.GetResponse ();
MessageBox.Show(((HttpWebResponse) response).StatusDescription);
dataStream = response.GetResponseStream ();
StreamReader reader = new StreamReader (dataStream);
string responseFromServer = reader.ReadToEnd();
MessageBox.Show(responseFromServer);
reader.Close ();
dataStream.Close ();
response.Close ();
}
Run Code Online (Sandbox Code Playgroud)
...我早些时候曾尝试过这段代码,这是我从“Microsoft .NET Compact Framework”一书中得到的: …
我想知道什么是内容类型,为什么我们需要设置标题请求的内容类型以及可以设置多少种标题内容?请尽可能提供文件。
webresponse ×10
c# ×6
webrequest ×3
.net ×2
stream ×2
android ×1
content-type ×1
download ×1
get ×1
getresponse ×1
http ×1
httprequest ×1
idisposable ×1
lockup ×1
request ×1
rest ×1
storagefile ×1
streaming ×1
twitter ×1
web ×1
web-services ×1
xml ×1