背景信息:我有一个程序通过 url 列表运行;每个 URL 一次下载一个,但在后台线程中运行以保持 UI 响应能力。为了报告进度,我使用 DownloadFileAsync 方法。我的问题是我希望能够有一个取消按钮来立即结束下载。我的代码大致如下
AutoResetEvent autoMobile = new AutoResetEvent(false);
WebClient dclient = new WebClient();
//setup event handlers... for progress, etc...
dclient.DownloadFileAsync(new Uri(egg.DownloadURL), egg.LocalFilePath);
autoMobile.WaitOne();
//end of DoWork
Run Code Online (Sandbox Code Playgroud)
我想不出插入循环来检查取消挂起的方法或位置。我对线程只有一点了解,也不完全理解 AutoResetEvent。
我正在使用其他c#app中的代码,我可以看到WP7中的代码不支持头文件.如何更改该代码以在WP7中工作
client.Headers.Add(HttpRequestHeader.Authorization, header_auth);
Run Code Online (Sandbox Code Playgroud) 我想用德语抓取谷歌建议:
string url = "http://google.de/complete/search?output=toolbar&q=" + txtResults.Lines[i].Replace(" ", "%20%");
WebClient client = new WebClient();
client.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:17.0) Gecko/17.0 Firefox/17.0");
client.Headers.Add("Accept-Encoding:", "gzip, deflate");
client.Headers.Add("Connection:", "keep-alive");
doc.Load(client.OpenRead(url), System.Text.Encoding.UTF8, true);
Run Code Online (Sandbox Code Playgroud)
但我总是得到国际结果,而在浏览器中,我通过给定的 .de url 得到德国结果。所以我添加了标题:
client.Headers.Add("Accept-Language:", "de-de,de;q=0.8,en-us;q=0.5,en;q=0.3");
Run Code Online (Sandbox Code Playgroud)
但现在我收到错误: 指定的值具有无效的 HTTP 标头字符
我还尝试通过以下方式设置我的应用程序的语言
Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE");
Run Code Online (Sandbox Code Playgroud)
但这也无济于事。
我有这个问题 - 我正在编写一个简单的网络蜘蛛,到目前为止效果很好。问题是我正在工作的网站有一个令人讨厌的习惯,有时会重定向或向地址添加内容。在某些页面中,它会在加载后添加“/about”,而在某些页面上,它会完全重定向到另一个页面。Web 客户端会感到困惑,因为它下载了 html 代码并开始解析链接,但由于其中许多链接的格式为“../../something”,所以一段时间后它就会崩溃,因为它根据以下内容计算链接第一个给定地址(在重定向或添加“/about”之前)。当新创建的页面从队列中出来时,它会抛出 404 Not Found 异常(令人惊讶)。
现在我可以自己将“/about”添加到每个页面,但是对于狗屎和傻笑,网站本身并不总是添加它......
我将不胜感激任何想法。感谢您抽出宝贵时间,祝一切顺利!
我使用下面的代码打开对 youtube 视频的流请求,但它总是返回异常“远程服务器返回错误:NotFound”。然后我尝试使用 Fiddler 来检测问题,我看到 WebClient 自动将 User-Agent 字段设置为 NativeHost,而不是我的 User-Agent 如下。
我向 youtube 发送请求的代码:
private static Task<string> HttpGet(string uri)
{
var task = new TaskCompletionSource<string>();
var web = new WebClient();
web.OpenReadCompleted += (sender, args) =>
{
if (args.Cancelled)
task.SetCanceled();
else if (args.Error != null)
task.SetException(args.Error);
else
{
//var bytes = args.Result.ReadToEnd();
byte[] bytes = new byte[] { };
using (MemoryStream memoryStream = new MemoryStream())
{
args.Result.CopyTo(memoryStream);
bytes = memoryStream.ToArray();
task.SetResult(Encoding.UTF8.GetString(bytes, 0, bytes.Length));
}
}
};
web.Headers[HttpRequestHeader.UserAgent] = "Mozilla/5.0 (compatible; …Run Code Online (Sandbox Code Playgroud) 我需要使用WebClient.DownloadDataAsync 方法来实现异步下载
我已经定义了事件处理程序如下:
Private Sub DownloadCompleted(sender As Object, e As DownloadDataCompletedEventArgs)
Dim bytes() As Byte = e.Result
'do somthing with result
End Sub
Run Code Online (Sandbox Code Playgroud)
但是我需要向这个事件处理程序传递一个额外的参数以及我创建 URI 的下载结果值。例如:
Dim pictureURI = "http://images.server.sample.com/" + myUniqueUserIdentifier
我需要myUniqueUserIdentifier在DownloadCompletedsub 中进行回调。
我正在使用以下代码注册我的事件处理程序:
AddHandler webClient.DownloadDataCompleted, AddressOf DownloadCompleted
我只有一个猜测,扩展WebClient对象和覆盖DownloadDataCompleted对象。但在我要执行此操作之前,我想检查一下是否有更简单的解决方案?
谢谢你。
下面是所有真正需要工作的代码。我有理由相信这个问题只与discogs有关。如果是discogs,我想知道一种解决方法,例如模拟浏览器。
使用下面的代码它应该连接到页面然后下载图像,但是当我运行它时会出现 503 错误。如果我使用相同的链接连接到页面,它将在我的浏览器中显示图像。
WebClient client = new WebClient();
client.DownloadFile("https://img.discogs.com/h7oMsgLSWi7D6nBR8wdBwWulJ8w=/fit-in/600x600/filters:strip_icc():format(jpeg):mode_rgb():quality(90)/discogs-images/R-9259029-1477514675-9740.jpeg.jpg", @"C:\Programming\Test\downloadimage.jpg");
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用 Imgur,并使用程序执行此操作,它会按预期下载图像。
client.DownloadFile("http://i.imgur.com/sFq0wAC.jpg", @"C:\Programming\Test\downloadimage.jpg");
Run Code Online (Sandbox Code Playgroud)
我能够使用客户端连接到discogs,甚至通过它运行搜索并使用client.DownloadString("url"); 以文本形式(尽管通过html)获取结果;
但我无法下载任何图像。我将不胜感激,此时我想要的只是图像。
我正在尝试从以下位置下载图像
http://aplweb.soriana.com/foto/fotolib/14/7503003936114/7503003936114-01-01-01.jpg
使用网络客户端。
url 以 .jpg 结尾,但图像为 .WEBP 格式。
using (WebClient wb = new WebClient())
{
wb.DownloadFile("http://aplweb.soriana.com/foto/fotolib//14/7503003936114/7503003936114-01-01-01.jpg", "image.jpg");
}
Run Code Online (Sandbox Code Playgroud)
我直接尝试过.DownloadData()、asyng方法、HttpClient、WebRequest。..我总是遇到同样的错误。
任何想法?
我的应用程序有一些针对不同休息端点的服务。逻辑总是相同的,所以我想使用继承和泛型来避免代码重复。但一行(bodyToMono(E[].class))不起作用。我不明白还有其他选择(也许是最佳实践方式)吗?
家长班级:
@Configuration
@Service
public abstract class AbstractEntitiesRestService<E>{
protected abstract String getBaseUrl();
@Autowired
@Qualifier("webClient")
protected WebClient WebClient;
@Override
public E[] getObjectsFromCustomQueryImpl(CustomQuery query) {
return jtWebClient.get()
.uri(getBaseUrl())
.retrieve()
.bodyToMono(E[].class) <---- Error!
.block();
}
}
Run Code Online (Sandbox Code Playgroud)
儿童班:
@Configuration
@Service
public class UserService extends AbstractEntitiesRestService<User> {
@Value("${endpoint}")
protected String baseUrl;
@Override
protected String getBaseUrl(){
return baseUrl;
}
...
}
Run Code Online (Sandbox Code Playgroud) 我有以下代码
private void SaveFile(string linkToFile, string filename)
{
using WebClient client = new();
client.DownloadFile(linkToFile, ResourcePath + filename);
}
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,如何使用 HttpClient 而不是 WebClient 下载 Excel 文件?
webclient ×10
c# ×8
download ×2
background ×1
generics ×1
java ×1
server-error ×1
user-agent ×1
vb.net ×1
web-crawler ×1
web-scraping ×1
webp ×1