Dotinho Posted July 14, 2013 at 10:56 AM Report #518690 Posted July 14, 2013 at 10:56 AM Bom dia Pessoal, Tenho uma situação chata, que ja andei a dar ás voltas e não sei o que posso fazer, eu explico. por exemplo neste site http://office.microsoft.com/en-us/images/results.aspx?qu=icons&ex=1 onde tem imagens e icones, já há algum tempo fiz um programa para ler o site atraves do webcliente.downloadString(<url>), e depois ele escolhe as imagens e guarda-as numa pasta. Só que em alguns sites, uma vezes da bem, outras vezes aparece o error "he remote server returned an error: (500) Internal Server Error". O engraçado é que se abrir o mesmo link no IE, já funciona.. No webclient já adicionei coockies de alguns sites, mas mesmo assim não dá.. Alguem já passou pelo mesmo? ou tem alguma ideia? Luis Lourenço Luis Lourenço
cdaniel.marques Posted July 14, 2013 at 01:08 PM Report #518698 Posted July 14, 2013 at 01:08 PM (edited) Já experimentas-te usar um user agent? Dim client As New WebClient() ' Add a user agent header in case the ' requested URI contains a query. client.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)") http://social.msdn.microsoft.com/Forums/vstudio/en-US/56d76153-8e9c-49d8-ab16-a4043dffbbb3/server-error-500-in-using-webclientdownloadstring-in-aspnet-vbnet http://msdn.microsoft.com/en-us/library/system.net.webclient(v=vs.100).aspx Edited July 14, 2013 at 01:08 PM by cdaniel.marques
Dotinho Posted July 14, 2013 at 06:33 PM Author Report #518729 Posted July 14, 2013 at 06:33 PM Obrigado null, mas mesmo assim não deu.. 😞 O engraçado, é que se eu fizer um Webrowser escondido e carregar o link por lá, e depois adquirir o html em string, já dá.. mas demora muito mais tempo. Acho que é por ficar a carregar a página toda.. Luis Lourenço
cdaniel.marques Posted July 14, 2013 at 06:53 PM Report #518732 Posted July 14, 2013 at 06:53 PM (edited) "Try-Catch User" 🙂 , substituiste o nome da váriavel que eu forneci: "client", pela que tu estás a usar: "webcliente"?: client.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)") Edited July 14, 2013 at 06:58 PM by cdaniel.marques
Dotinho Posted July 14, 2013 at 06:58 PM Author Report #518733 Posted July 14, 2013 at 06:58 PM Então pois claro: Try wc = New WebClient() wc.Headers.Add("Cookie", "23019324.494424916.1340739428.1340739428.1340739428.1") wc.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)") pg = wc.DownloadString(url) Catch ex As Exception MsgBox(ex.Message & vbNewLine & vbNewLine & url) Exit Sub End Try e foi assim, testei com e sem cookie, ou seja uma de cada vez e as duas juntas.. Luis Lourenço
cdaniel.marques Posted July 14, 2013 at 07:28 PM Report #518737 Posted July 14, 2013 at 07:28 PM (edited) Funcionaria com um Stream Reader? Dim client As New WebClient() ' Add a user agent header in case the ' requested URI contains a query. client.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)") Dim data As Stream = client.OpenRead(url) Dim reader As New StreamReader(data) Dim s As String = reader.ReadToEnd() TextBox1.Text = s data.Close() reader.Close() Edited July 14, 2013 at 07:30 PM by cdaniel.marques
Dotinho Posted July 14, 2013 at 07:59 PM Author Report #518738 Posted July 14, 2013 at 07:59 PM (edited) infelizmente, comporta-se da mesma maneira. 😞 Try wc = New WebClient() wc.Headers.Add("Cookie", "23019324.494424916.1340739428.1340739428.1340739428.1") wc.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)") 'pg = wc.DownloadString(url) Dim s As IO.Stream = wc.OpenRead(url) Dim sr As New IO.StreamReader(s) pg = sr.ReadToEnd() Catch ex As Exception MsgBox(ex.Message & vbNewLine & vbNewLine & url) Exit Sub End Try vou optar por carregar a página num webrowser e depois ler a partir de lá... ## EDIT ## Fui a um site ver os Headers mais comuns, e fiz igual no meu webclient, e não deu nada. wc.Headers.Add("User-agent", "Opera/9.80 (Windows NT 6.1; WOW64) Presto/2.12.388 Version/12.16") wc.Headers.Add("Accept", "text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/webp, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1") wc.Headers.Add("Accept-Encoding", "gzip, deflate") wc.Headers.Add("Accept-Language", "pt-PT,pt;q=0.9,en;q=0.8") wc.Headers.Add("Connection", "Keep-Alive") Edited July 14, 2013 at 08:10 PM by Dotinho Luis Lourenço
thoga31 Posted July 14, 2013 at 08:41 PM Report #518740 Posted July 14, 2013 at 08:41 PM Só um aparte... "Try-Catch User" 🙂 O nome do membro é Dotinho. Try-catch user é apenas um título do membro dado em função do seu número de posts. Da mesma forma, tu és o cdaniel.marques e tens o título "Novo Membro" (que é também, neste caso, um grupo à parte). Knowledge is free!
cdaniel.marques Posted July 14, 2013 at 09:40 PM Report #518746 Posted July 14, 2013 at 09:40 PM (edited) @thoga31: Eu sei. Era ironia, porque o Dotinho tinha chamado null: Obrigado null, mas mesmo assim não deu.. 😞 Daí o smile. 🙂 @Dotinho: consegues postar um Print do Erro? Que tipo de controlo é a pg? pg = sr.ReadToEnd() Consegui fazer um load da página que referiste para uma TextBox. Edited July 14, 2013 at 09:47 PM by cdaniel.marques
Rui Carlos Posted July 14, 2013 at 10:01 PM Report #518750 Posted July 14, 2013 at 10:01 PM Será um problema de ausência de referer? Alguns sites implementam protecções para evitar acesso directo às imagens, que muitas vezes se baseia no referer. Rui Carlos Gonçalves
Dotinho Posted July 15, 2013 at 05:21 PM Author Report #518836 Posted July 15, 2013 at 05:21 PM Agradeço as vossas sugestões, mas penso que já está resolvido.. Não sei bem o porque. Obrigado a todos. Luis Lourenço
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now