브라우저가 왜이 링크를 다운로드하지 않습니까?


30

Mac OS 10.11.6 El Capitan을 실행하고 있습니다. 프로그래밍 방식으로 다운로드하고 싶은 링크가 있습니다 :

https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.16-osx10.11-x86_64.dmg

이 URL을 브라우저 (예 : Safari)에 붙여 넣으면 다운로드가 완벽하게 작동합니다.

그러나을 사용하여 명령 줄에서 동일한 URL을 다운로드하려고하면 curl작동하지 않습니다. 결과는 빈 파일입니다.

$ ls -lA
$ curl -O https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.16-osx10.11-x86_64.dmg
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
$ ls -lA
total 0
-rw-r--r--  1 myname  staff  0 Nov  7 14:07 mysql-5.7.16-osx10.11-x86_64.dmg
$ 

물론 브라우저를 통해 파일을 가져올 수 있지만 위 의 명령이 작동하지 않는 이유 를 알고 싶습니다 curl.

curl웹 사이트 에이 파일이 있고 그래픽 웹 브라우저를 통해 올바르게 액세스하여 다운로드 할 수 있는데 왜이 파일을 올바르게 다운로드 할 수 없습니까?


7
리디렉션에 대한 techraf의 답변이 완전히 정확하더라도 헤더와 같은 다른 요인으로 인해 서버가 파일을 다운로드하라는 curl 클라이언트의 요청을 거부 할 수 있습니다. 예를 들어, 서버에 백엔드 DDoS 보호 기능이있는 경우 이러한 보호 소프트웨어는 일반적으로 적절한 브라우저 헤더가있는 등 실행 가능한 브라우저 헤더를 확인합니다 User-Agent. 또한 세션 쿠키 (예 : 로그인 한 경우)가 해당 브라우저에만 있기 때문에 일부 브라우저 다운로드에 성공할 수 있습니다.
Joseph A.

6
curl 명령의 문제를 해결하기 curl -v위해 "verbose"를 사용할 수 있습니다 . 연결, 요청 및 응답에 대한 다양한 정보를 표준 오류로 인쇄합니다. 이 경우 응답에 HTTP 302 Found(리디렉션 코드)와 LocationURL이 포함 된 헤더가 포함되어 있음을 알 수 있습니다. 그런 man curl다음 리디렉션을 따르도록 지시하는 방법을 찾을 수 있습니다.
Nathan Long

답변:


59

웹 서버 측에서 다음 URL로 리디렉션됩니다 http://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.16-osx10.11-x86_64.dmg. CDN이므로 리디렉션 여부에 관계없이 정확한 동작은 위치에 따라 달라질 수 있습니다.

curl기본적으로 리디렉션을 따르지 않습니다. 그렇게하려면 -L다음과 같이 인수를 추가하십시오 .

curl -L -O https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.16-osx10.11-x86_64.dmg

6
HTTPS에서 HTTP 로의 리디렉션? Curl이 홀로 남겨둔다는 사실은 놀랍지 않습니다.
Toby Speight

그리고 이것이 해결되지 않으면? .asp와 관련이 있습니까?
mathtick

4

브라우저가 파일을 다운로드 할 수있는 경우 브라우저가 수행중인 작업을 검사 할 수 있습니다. Google 크롬에서는 다음을 사용하여 현재 상황을 확인할 수 있습니다.

1) [보기> 개발자> 개발자 도구> 네트워크 탭> 헤더 탭]

2) 다운로드 링크를 클릭하십시오.

3) 파일 링크가 개발자 도구 탭에 나타납니다.

4) 파일을 마우스 오른쪽 버튼으로 클릭하고 복사> cURL로 복사를 선택하십시오.

이제 컬 링크가 작동합니다. 트림 할 수있는 초과 매개 변수가있을 수 있습니다.

자세한 내용은 https://lornajane.net/posts/2013/chrome-feature-copy-as-curl


0

이 게시물에 대한 의견 중 하나를 답변으로 변환하겠습니다.

작동하려면 특정 헤더가 필요한 많은 HTTP / HTTPS 링크가 있습니다. 따라서 웹 브라우저에서는 작동하지만 컬과 같은 백엔드 웹 요청에서는 작동하지 않습니다.

방금 다음 헤더가 모두 필요한 사이트를 방문했습니다. 지정하지 않으면 시간이 초과되었습니다.

  httpget.setHeader("User-Agent", "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36");
  httpget.setHeader("Upgrade-Insecure-Requests", "1");
  httpget.setHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8");
  httpget.setHeader("Accept-Encoding", "gzip, deflate, br");
  httpget.setHeader("Accept-Language", "en-US,en;q=0.9");
  httpget.setHeader("Connection", "keep-alive");
  httpget.setHeader("Host", "www.thehost.com");
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.