标签: webrequest

在WebRequest中发送gzip压缩数据?

我有大量的数据(~100k),我的C#app正在安装mod_gzip发送到我的Apache服务器.我正在尝试使用System.IO.Compression.GZipStream首先gzip数据.PHP接收原始的gzip压缩数据,因此Apache并没有像我期望的那样解压缩它.我错过了什么吗?

System.Net.WebRequest req = WebRequest.Create(this.Url);
req.Method = this.Method; // "post"
req.Timeout = this.Timeout;
req.ContentType = "application/x-www-form-urlencoded";
req.Headers.Add("Content-Encoding: gzip");

System.IO.Stream reqStream = req.GetRequestStream();

GZipStream gz = new GZipStream(reqStream, CompressionMode.Compress);

System.IO.StreamWriter sw = new System.IO.StreamWriter(gz, Encoding.ASCII);
sw.Write( large_amount_of_data );
sw.Close();

gz.Close();
reqStream.Close()


System.Net.WebResponse resp = req.GetResponse();
// (handle response...)
Run Code Online (Sandbox Code Playgroud)

我不完全确定"Content-Encoding:gzip"适用于客户端提供的头文件.

c# gzip webrequest gzipstream

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

WebRequest无法正确下载大文件(~1 GB)

我试图从公共URL下载一个大文件.它起初似乎运行良好,但1/10计算机似乎超时.我最初的尝试是使用,WebClient.DownloadFileAsync但因为它永远不会完成我回到使用WebRequest.Create并直接读取响应流.

我使用的第一个版本WebRequest.Create发现了同样的问题WebClient.DownloadFileAsync.操作超时,文件未完成.

如果下载超时,我的下一个版本会添加重试.这是奇怪的.下载最终完成1次重试以完成最后7092字节.因此,文件的下载大小完全相同但文件已损坏且与源文件不同.现在我希望腐败在最后7092字节,但事实并非如此.

使用BeyondCompare我发现损坏的文件中缺少2个字节块,总计缺少7092个字节!在下载超时并重新启动之前,这个丢失的字节位于1CA49FF01E31F380之前.

这可能会发生什么?有关如何进一步追踪此问题的任何提示?

这是有问题的代码.

public void DownloadFile(string sourceUri, string destinationPath)
{
    //roughly based on: http://stackoverflow.com/questions/2269607/how-to-programmatically-download-a-large-file-in-c-sharp
    //not using WebClient.DownloadFileAsync as it seems to stall out on large files rarely for unknown reasons.

    using (var fileStream = File.Open(destinationPath, FileMode.Create, FileAccess.Write, FileShare.Read))
    {
        long totalBytesToReceive = 0;
        long totalBytesReceived = 0;
        int attemptCount = 0;
        bool isFinished = false;

        while (!isFinished)
        {
            attemptCount += 1;

            if (attemptCount > 10) …
Run Code Online (Sandbox Code Playgroud)

c# file webrequest download web

16
推荐指数
1
解决办法
3082
查看次数

如何在HttpWebRequest中更改原始IP

我在已分配5个IP的服务器上运行此应用程序.我使用HttpWebRequest从网站获取一些数据.但是当我建立连接时,我能够指定连接的5个IP中的哪一个.HttpWebRequest是否支持此功能?如果不能,我可以从中继承一个类来改变它的行为吗?我在这里需要这样的想法.

我的代码现在是这样的:

System.Net.WebRequest request = System.Net.WebRequest.Create(link);
((HttpWebRequest)request).Referer = "http://application.com";
using (System.Net.WebResponse response = request.GetResponse())
{
    StreamReader sr = new StreamReader(response.GetResponseStream());
    return sr.ReadToEnd();
}
Run Code Online (Sandbox Code Playgroud)

c# ip webrequest httpwebrequest

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

有没有人知道这个错误:"错误的本地标题签名:0x6D74683C"?

以下代码用于下载zip文件并在手机上解压缩.

用于对WP7的工作相同的代码,我开始WP8设备上进行测试,而奇怪的事情正在发生的事情......现在它可以在WP8,但不是在WP7了.

在WP7上它给出了一个错误:

Wrong Local header signature: 0x6D74683C
Run Code Online (Sandbox Code Playgroud)

有人能告诉我这里有什么问题吗?

观察(发布问题后2天)

我有一些观察......在这里详细分享(图像格式)或(Excel格式)

代码

using ICSharpCode.SharpZipLib.Zip;
using System;
using System.Diagnostics;
using System.IO;
using System.IO.IsolatedStorage;
using System.Net;

namespace iq_main.Network
{

    public class IQ_Download
    {
        private string zipFilePassword = String.Empty;
        private string fileNameToBeStoredAs = String.Empty;
        private string urlToBeDownloaded = String.Empty;
        private HttpWebResponse response;

        public void Download(string _urlToBeDownloaded = GlobalConstants.DownloadLanguageConfigurationUrl, string _fileNameToBeStoredAs = GlobalConstants.DownloadLanguageConfigurationXmlFilename, string _zipFilePassword = GlobalConstants.DownloadZipsPassword)
        {

            urlToBeDownloaded = _urlToBeDownloaded; 
            fileNameToBeStoredAs = _fileNameToBeStoredAs; …
Run Code Online (Sandbox Code Playgroud)

c# webrequest download windows-phone-7 windows-phone-8

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

从打开的HTTP流中读取数据

我正在尝试使用.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,或者我是否必须选择较低级别的网络类?也许有其他库可以让我这样做?

艾伦

c# streaming http webrequest webresponse

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

PowerShell v3 Invoke-WebRequest:与表单混淆

自从我升级到Windows 8后,很多依赖于启动隐形IE的PowerShell脚本将不再适用,所以我尝试切换到Invoke-WebRequest命令.我做了很多谷歌搜索,但仍然无法让我的脚本工作.

这是应该做的:

  1. 使用简单的表单(用户名,密码,提交按钮)加载网站,
  2. 输入凭据
  3. 并提交它们.

借助于令人难以置信的微软技术网示例的"帮助"(至少对我而言),我将以下内容拼凑在一起:

$myUrl = "http://some.url"  

$response = Invoke-WebRequest -Uri $myUrl -Method Default -SessionVariable $rb
$form = $response.Forms[0]
$form.Fields["user"]     = "username"
$form.Fields["password"] = "password"

$response = Invoke-WebRequest -Uri $form.Action -WebSession $rb -Method POST 
$response.StatusDescriptionOK
Run Code Online (Sandbox Code Playgroud)

我收到两个错误,第一个是在尝试写入"user"字段时:

无法索引到空数组.

$ form.Fields ["user"] ="用户名"

+ CategoryInfo          : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : NullArray
Run Code Online (Sandbox Code Playgroud)

第二个与$form.Action我不知道应该阅读的内容有关:

Invoke-WebRequest:无法验证参数'Uri'的参数.参数为null或空.提供非null或空的参数,然后再次尝试该命令.

我再次依赖微软的例子#2.

编辑:感谢hammar的资本化.我的举止在哪里?;)

forms powershell webrequest web

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

使用WebClient或WebRequest登录网站并访问数据

我正在尝试使用WebClient/ 访问网站上的受限数据WebRequest.该网站没有官方API,所以我要做的就是填写HTML表单并将值发布到服务器,这样我就登录了.

我尝试了这个这个,但它看起来不像即将发出的请求已登录.

后一个例子更吸引人,因为我显然更喜欢WebClient,但遗产WebRequest会做.

无论如何,在第一个例子中,我认为它确实登录了,但即将到来的访问私有数据的请求返回一个页面,其中包含消息"这是仅限会员的内容".

如何WebClient永久登录?

c# forms webclient login webrequest

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

System.Net.ProtocolViolationException:在调用[Begin] GetResponse之前,必须将ContentLength字节写入请求流

我得到了

"System.Net.ProtocolViolationException:在调用Web请求的"BeginGetResponse"方法时,必须在调用[Begin] GetResponse"错误之前将ContentLength字节写入请求流.

这是我的代码:

try
{
    Stream dataStream = null;
    WebRequest Webrequest;
    Webrequest = WebRequest.Create(this.EndPointAddress);
    Webrequest.Credentials = new NetworkCredential(this.username, this.password);

    Webrequest.ContentType = "text/xml";
    Webrequest.Method = WebRequestMethods.Http.Post;                    

    byteArray = System.Text.Encoding.UTF8.GetBytes(xmlRequest.Children[0].InnerXML);

    Webrequest.ContentLength = byteArray.Length;

    dataStream = Webrequest.GetRequestStream();
    dataStream.Write(byteArray, 0, byteArray.Length);                

    RequestState rs = new RequestState();
    rs.Request = Webrequest;                    

    IAsyncResult r = (IAsyncResult)Webrequest.BeginGetResponse(new AsyncCallback(RespCallback), rs);
}
catch (Exception exc)
{                    
    TRACE.EXCEPTION(exc);
}
finally
{
    dataStream.Close();
}
Run Code Online (Sandbox Code Playgroud)

更具体地说,在调用函数"getRequestStream()"之后,Stream正在为长度抛出此异常:

'stream.Length'抛出了'System.NotSupportedException'类型的异常

可能是什么原因造成的?

c# exception webrequest content-length

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

在PHP中获取唯一的worker/thread/process/request ID

在多线程环境中(像大多数Web平台一样),我经常在我的应用程序的日志中包含某种线程ID.这使我能够确切地告诉哪些日志条目来自哪个请求/线程,当有多个请求同时写入同一个日志时.

在.NET/C#中,这可以通过log4net的格式化程序来完成,默认情况下包括当前线程ManagedThreadId(数字)或Name(给定名称).这些属性唯一标识一个线程(例如:参见:如何使用log4net使用Threadpool线程记录正确的上下文?

在PHP中,我没有发现任何类似的东西(我问谷歌,PHP文档和SO).它存在吗?

php logging multithreading webrequest

13
推荐指数
2
解决办法
6929
查看次数

我可以使用.NET Framework从指定的IP地址发送webrequest吗?

我有一个多IP地址的服务器.现在我需要使用http协议与多个服务器通信.每个服务器只接受来自我的服务器的指定IP地址的请求.但是在.NET中使用WebRequest(或HttpWebRequest)时,请求对象将自动选择IP地址.无论如何我都找不到用地址绑定请求.

反正有没有这样做?或者我必须自己实施webrequest课程?

.net c# webrequest ip-address

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