2017-10-15 1 views
0

WebClient를 사용하여 웹 사이트에서 이미지를 다운로드하고 싶습니다. 이미지가있는 경우 브라우저를 통해 확인했습니다. - 내부 서버 오류가 500을 반환 할 이유브라우저에서 이미지를로드하는 동안 DownloadFile에서 WebClient가 500 (내부 서버 오류)을 반환합니다.

Private Function pDownload(ByVal uFrom As String, ByVal uTo As String) As Boolean 

    Try 
     Using Client As New WebClient 
      Client.DownloadFile(uFrom, uTo) 
     End Using 
     Return True 
    Catch ex As Exception 
     Debug.Print("Failed: " + uFrom + vbNewLine + ex.ToString) 
     Return False 
    End Try 

End Function 

아무도 볼 수 있습니까 :

나는 이미지를 다운로드하려면이 코드를 사용하고 있습니다?

+2

아마도 WebClient에서 사용하는 User-Agent 때문일 수 있습니다. – DogeAmazed

+0

@DogeAmazed 네, 저의 경우 해결책이었습니다. 당신의 대답을 당신의 대답으로 만들 수 있습니까? – tmighty

답변

0

500 - 내부 서버 오류는 .net의 로컬 오류가 아니라 서버 응답입니다. 다운로드 코드는 URL uFrom을 로컬 파일 uTo에 다운로드하는 매우 간단한 호출이며 정상적으로 작동하는 것 같습니다.

문제는 서버가 500 INTERNAL SERVER ERROR으로 응답하고 사용자가 200 OK으로 응답 할 것으로 예상하는 것입니다. WebClient은 서버로부터 500 응답을보고 그것이 성공적이지 않은 응답임을 알고 있으므로 예외를 throw합니다. 파일이 누락 된 경우 404 NOT FOUND으로 응답해야합니다. 허락을받지 못하면 문제가있는 서버가 401 NOT AUTHORIZED으로 응답 할 것으로 예상됩니다. 500 일반 응답은 단순히 "예기치 않은 무언가가 잘못되었습니다"라는 의미입니다.

서버가 파일 시스템 오류, 데이터베이스 오류, 서버 응용 프로그램의 버그 등과 같이 500으로 응답하는 데는 여러 가지 이유가 있습니다. 서버 측에서 게시하지 않기 때문에 코드에서 서버 응용 프로그램을 작성하지 않았으며 이것이 기존의 (아마도 잘 작동하는) 서버라는 것을 알 수 있습니다. 당신이 공상 과학을하지 않고서 단지 파일을 다운로드하려한다면 - 내가 생각할 수있는 가장 큰 이유는 uFrom에있는 귀하의 URL이 유효하지 않거나 서버에 의해 안전하다고 생각되지 않기 때문입니다.

URL을 테스트하여 시크릿 모드 또는 비공개 브라우징 모드에서 새 브라우저 창을 열고 (서버 동작이 달라지는 쿠키가 없는지 확인) 주소에 uFrom 값을 직접 붙여 넣는 쉬운 방법 바. 브라우저 (500)에서 동일한 결과를 얻으면 서버 또는 URL에 이상이 있음을 알 수 있습니다. 브라우저 테스트에서 코드 실행과 다른 결과를 얻는 경우 브라우저에서 오는 요청 헤더에는 기본적으로 WebClient이 보내는 것과 다른 결과가 있습니다. 이 경우 fiddler 또는 이와 유사한 도구를 설치하여 브라우저가 URL을 요청할 때와 코드가 동일한 URL을 요청할 때 발생하는 상황의 차이를 조사 할 것을 제안합니다.