Chcem stiahnuť jeden obrázok z adresy URL pomocou konzolovej aplikácie.
Použil som nasledujúci kód:
string sourceUrl = "http://i.ytimg.com/vi/pvBnYBsUi9A/default.jpg"; // Not Found
//string sourceUrl = "http://i.ytimg.com/vi/OrxZAN1FZUY/default.jpg"; // Found
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(sourceUrl);
HttpWebResponse response = null;
try
{
response = (HttpWebResponse)request.GetResponse();
}
catch (Exception)
{
}
Nad kódom sa vyskytuje výnimka v riadku "response = (HttpWebResponse) request.GetResponse ();"
ale keď pristupujem "http://i.ytimg.com/vi/pvBnYBsUi9A/default.jpg"url v prehliadači, potom sa zobrazí obrázok.
Čo tu chýba?
odpovede:
1 pre odpoveď č. 1Skúšal som túto adresu URL "http://i.ytimg.com/vi/pvBnYBsUi9A/default.jpg"v prehliadači Chrome nástroje pre vývojárov. Taktiež prijíma 404, ale odpoveď obsahuje aj obrázok, ktorý zobrazuje.
Váš kód nie je príčinou výnimky. Stránka vráti 404 a váš kód dostane výnimku.
Môžete napísať logiku, aby ste sa pozreli na odpoveď, aj keď dostanete 404 a rozhodnete sa, či ho budete mať, rovnako ako to robí prehliadač.
Zdá sa, že môžete získať odpoveď vrátená webom, ak sa chystáte WebException, čo vám umožní vidieť stav žiadosti http a odpoveď podľa dokumentácie.
Príklad z verzie .net 4.5 ...
try
{
// Creates an HttpWebRequest for the specified URL.
HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(url);
// Sends the HttpWebRequest and waits for a response.
HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
if (myHttpWebResponse.StatusCode == HttpStatusCode.OK)
Console.WriteLine("rnResponse Status Code is OK and StatusDescription is: {0}",
myHttpWebResponse.StatusDescription);
// Releases the resources of the response.
myHttpWebResponse.Close();
}
catch(WebException e)
{
Console.WriteLine("rnWebException Raised. The following error occured : {0}",e.Status);
}
catch(Exception e)
{
Console.WriteLine("nThe following Exception was raised : {0}",e.Message);
WebException má vlastnosti Odozva a Stav. Takže to vyzerá ako .Net spôsob, ako sa vysporiadať s týmto je zachytiť WebException a určiť, ako sa vysporiadať s obsahom stavu a odpovede (ak je to potrebné).