标签: webclient

WebClient中的POST数组(C#/ .net)

我有一个.net应用程序,它有一个WebRequest,它给POST添加了多次相同的密钥,从而使它成为PHP,Java Servlets等眼中的数组.我想把它重写为使用WebClient,但如果我多次使用相同的键调用WebClient的QueryString.Add(),它只是附加新值,使用逗号分隔的单个值而不是值数组.

我使用WebClient的UploadFile()发布我的请求,因为除了这些元数据,我还想发布一个文件.

如何使用WebClient发布值数组而不是单个值(逗号分隔值)?

干杯

.net c# arrays webclient file-upload

7
推荐指数
1
解决办法
5102
查看次数

在PowerShell v2中编译新类型 - Cookie Aware WebClient

我正在尝试编译WebClient类的" cookie感知 "版本- 但我似乎无法克服使用PowerShell v2中添加的Add-Type cmdlet的一些障碍.这是我试图编译的代码:

PS C:\> $def = @"
public class CookieAwareWebClient : System.Net.WebClient
{
  private System.Net.CookieContainer m_container = new System.Net.CookieContainer();
  protected override System.Net.WebRequest GetWebRequest(System.Uri address)
  {
    System.Net.WebRequest request = base.GetWebRequest(address);
    if (request is System.Net.HttpWebRequest)
    {
      (request as System.Net.HttpWebRequest).CookieContainer = m_container;
    }
    return request;
  }
}
"@

PS C:\> Add-Type -TypeDefinition $def
Run Code Online (Sandbox Code Playgroud)

它似乎无法找到无法找到的CookieContainer类型(虽然它是完全合格的......) - 显然我对某些东西视而不见.

编辑:更新了示例代码以使其正确并且可以复制n-pasteable,谢谢!

c# powershell webclient powershell-2.0

7
推荐指数
1
解决办法
1069
查看次数

使用.NET WebClient模拟XmlHttpRequest

AFAIK XmlHttpRequest我可以使用该send方法下载和上传数据.但是WebClient有很多方法.我不想要所有的功能WebClient.我只是想创建一个模拟a的对象XmlHttpRequest,除了它没有XSS限制.我也不关心将响应作为XML或甚至现在作为字符串.如果我可以把它作为一个足够好的字节数组.

我以为我可以使用UploadData我的通用方法,但尝试使用它下载数据时失败,即使它返回响应.那么如何编写一个行为XmlHttpRequestsend方法类似的方法呢?

编辑:我在这里发现了一个不完整的类,它正是一个XmlHttpRequest模拟器.太糟糕了,整个代码都丢失了.

.net c# webclient xmlhttprequest winforms

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

C#WebClient登录accounts.google.com

我很难尝试使用webclient对accounts.google.com进行身份验证

我正在使用C#WebClient对象来实现以下功能.

我将表单字段提交到https://accounts.google.com/ServiceLoginAuth?service=oz

这是POST字段:

service=oz
dsh=-8355435623354577691
GALX=33xq1Ma_CKI
timeStmp=
secTok=
Email=test@test.xom
Passwd=password
signIn=Sign in
PersistentCookie=yes
rmShown=1
Run Code Online (Sandbox Code Playgroud)

现在,在我提交数据之前加载登录页面时,它有以下标题:

Content-Type                text/html; charset=UTF-8
Strict-Transport-Security   max-age=2592000; includeSubDomains
Set-Cookie                  GAPS=1:QClFh_dKle5DhcdGwmU3m6FiPqPoqw:SqdLB2u4P2oGjt_x;Path=/;Expires=Sat, 21-Dec-2013 07:31:40 GMT;Secure;HttpOnly
Cache-Control               no-cache, no-store
Pragma                      no-cache
Expires                     Mon, 01-Jan-1990 00:00:00 GMT
X-Frame-Options             Deny
X-Auto-Login                realm=com.google&args=service%3Doz%26continue%3Dhttps%253A%252F%252Faccounts.google.com%252FManageAccount
Content-Encoding            gzip
Transfer-Encoding           chunked
Date                        Thu, 22 Dec 2011 07:31:40 GMT
X-Content-Type-Options      nosniff
X-XSS-Protection            1; mode=block
Server                      GSE
Run Code Online (Sandbox Code Playgroud)

好了,现在我如何使用WebClient Class来包含这些标题?

我尝试过,webClient_.Headers.Add();但效果有限,总是返回登录页面.

以下是我使用的课程.非常感谢任何帮助.


获取登录页面

    public void LoginPageRequest(Account acc)
    {

        var rparams = new RequestParams();
        rparams.URL = @"https://accounts.google.com/ServiceLoginAuth?service=oz"; …
Run Code Online (Sandbox Code Playgroud)

c# cookies post webclient

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

无法访问文件 - WebClient.DownloadFile

所以我找了答案多次,并且经许可的东西围绕插手无济于事,但是这个代码仍然不会让我一个文件下载到指定的路径.

WebClient client = new WebClient();
client.DownLoadFile("http://dl.dropbox.com/u/(My account)/Installer.jar", @"c:\Games\Name\libs");
client.DownLoadFile("http://dl.dropbox.com/u/(My account)/Name.zip", @"c:\Games\Name");
Run Code Online (Sandbox Code Playgroud)

总是给我:"访问路径'c:\ Games\Name\libs'被拒绝."

另请注意,使用Windows XP SP3.

c# webclient file download access-denied

7
推荐指数
2
解决办法
8153
查看次数

WebChannelFactory&Headers?

是否可以设置标题WebChannelFactory?如果我使用的是WebClient对象,我可以这样做:

WebClient client = new WebClient();
client.Headers.Add("referer", "http://stackoverflow.com");
client.Headers.Add("user-agent", "Mozilla/5.0");
Run Code Online (Sandbox Code Playgroud)

但是我还没有找到修改标题的方法WebChannelFactory.

c# wcf webclient webchannelfactory

7
推荐指数
1
解决办法
3024
查看次数

为什么我的.net应用程序不会发出超过10个并发WebClient请求?

我正在尝试理解Windows中C#和I/O完成端口中async/await的复杂性,编写代码以验证我的假设.

从我的理解,调用WebClient.DownloadStringTaskAsync(...)将使当前线程注册I/O操作与I/O完成端口(这可能有点模糊,我还不了解细节),它将创建一个Task<string>,它将继续执行代码.在某些时候,它将遇到await给定的任务.此时,它将从当前方法返回(好吧,它将退出某个范围,我不确定这个范围是否可能是方法以外的东西 - 我应该检查生成的状态机以了解该部分) .一旦I/O操作完成,将从线程池中获取一个线程,它将传递I/O操作的结果,并将执行刚才提到的其余范围.

我已经尝试过验证这种行为,但只有在C#代码到目前为止看起来不正确之前:

class Program
{
    static void Main(string[] args)
    {
        ThreadPool.SetMaxThreads(30, 30);
        Console.WriteLine("Connection limit is {0}", ServicePointManager.DefaultConnectionLimit);
        for (int i = 0; i < 30; i++)
        {
            FetchAsync(i);
        }

        Console.WriteLine("Done starting requests");
        Console.ReadKey();
    }

    private async static void FetchAsync(int num)
    {
        WebClient wc = new WebClient();
        string result = await wc.DownloadStringTaskAsync("http://localhost/slow/index/15");
        Console.WriteLine("Done #{0}", num);
    }
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我使用a WebClient来创建30个网页请求(我知道这个请求很慢,需要15秒才能响应).运行此代码,我观察到以下行为:15秒后前10个请求完成.再过15秒后,另外10个请求完成,再过15秒后,其余请求完成.因此,似乎一次只有10个未完成的请求(使用perfmon我已经验证了被调用的Web应用程序有10个当前请求).这是为什么?我期待30个并发请求,因为我已根据上面的代码设置了线程池的最大线程数.

这个问题让我相信ServicePointManager可能与它有关,但由于DefaultConnectionLimit只有2,我认为没有联系.

我意识到这是一个相当简单的问题的冗长描述.我希望它能让人更容易指出我的假设错误的地方.

我在Windows 7,64位机器上运行它.

c# asynchronous webclient threadpool async-await

7
推荐指数
1
解决办法
1440
查看次数

DownloadFile vs DownloadFileAsync

我正在使用WebClient.DownloadFile一次从Web服务器下载单个文件,但是,我想知道是否"线程被阻止"开发人员意味着应用程序不会响应?

我尝试使用WebClient.DownloadFileAsync,但它不能像DownloadFile一样工作,请澄清,我说不清楚,因为我正在从我的网络下载文件,所以它几乎立即下载,提前感谢.

PS:是的我试过谷歌搜索和阅读,找不到我需要的答案.

c# networking webclient visual-studio-2010

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

从Windows Powershell脚本上载到Artifactory

我已经通过WebClient对象从Artifactory(Generic Repo)成功下载了一个文件.我通过相同的方法上传文件时遇到了麻烦.我试图找出通过Powershell上传到我们服务器的最简单方法.

请注意,此时安装其他实用程序(如Curl)不是一个选项.我正在编写自动化脚本,并希望坚持使用基本的Windows 2008 r2服务器,不需要安装其他实用程序,因为我无法指望它们在所有服务器上都存在.

如果某人有一个使用Rest API的示例脚本,那将是完美的!

下载代码的示例(这适用):

$SOURCE = "https://artifactory.example.com/artifactory/net-generic-local/APP/BF_1.0.zip"  
$DESTINATION = ".\BF_1.0.zip"  
$AF_USER ="user"  
$AF_PWD ="password"  
$WebClient = New-Object System.Net.WebClient  
$WebClient.Credentials = New-Object System.Net.NetworkCredential($AF_USER,$AF_PWD)  
$WebClient.DownloadFile($SOURCE,$DESTINATION)  
Run Code Online (Sandbox Code Playgroud)

这是上传代码的示例(不起作用):

$SOURCE = ".\BF_2.0.zip"  
$DESTINATION = "https://artifactory.example.com/artifactory/net-generic-local/APP/BF_2.0.zip"  
$AF_USER ="user"  
$AF_PWD ="password"  
$WebClient = New-Object System.Net.WebClient  
$WebClient.Credentials = New-Object System.Net.NetworkCredential($AF_USER, $AF_PWD)  
$URI = New-Object System.Uri($DESTINATION)  
$WebClient.UploadFile($URI,$SOURCE)  
Run Code Online (Sandbox Code Playgroud)

这是我从上传中得到的错误:

Exception calling "UploadFile" with "2" argument(s): "The remote server returned an error: (405) Method Not Allowed."  
At E:\transient\af_put.ps1:8 char:1  
+ $WebClient.UploadFile($URI,$SOURCE)  
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
    + CategoryInfo          : NotSpecified: …
Run Code Online (Sandbox Code Playgroud)

windows rest powershell webclient artifactory

7
推荐指数
2
解决办法
6920
查看次数

如何在没有异步的情况下使用HttpClient

您好我正在关注本指南

static async Task<Product> GetProductAsync(string path)
{
    Product product = null;
    HttpResponseMessage response = await client.GetAsync(path);
    if (response.IsSuccessStatusCode)
    {
        product = await response.Content.ReadAsAsync<Product>();
    }
    return product;
}
Run Code Online (Sandbox Code Playgroud)

我用这个例子在我的代码,我想知道有没有办法使用HttpClient没有async/await,我怎么能得到的唯一反应的字符串?

先感谢您

c# asp.net asp.net-mvc webclient

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