웹 브라우저를 사용하여 웹사이트를 탐색할 수 있습니다. 그러나 컬을 사용하여 GET 요청을 시도하면 중단됩니다. 예를 들어 명령이 curl -vL my_url
다음 로그에 멈췄습니다.
* Host $url:443 was resolved.
* IPv6: ***
* IPv4: ***
* Trying ***:443...
* Connected to $url (***) port 443
* ALPN: curl offers h2,http/1.1
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* CAfile: /etc/ssl/cert.pem
* CApath: none
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, Unknown (8):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384 / [blank] / UNDEF
* ALPN: server accepted http/1.1
* Server certificate:
* subject: C=**; ST=***; L=***; O=***; CN=***
* start date: Nov 17 05:09:32 2023 GMT
* expire date: Nov 17 14:59:59 2024 GMT
* subjectAltName: host "***" matched cert's "***"
* issuer: C=**; O=***; CN=***
* SSL certificate verify ok.
* Certificate level 0: Public key type ? (2048/112 Bits/secBits), signed using sha256WithRSAEncryption
* Certificate level 1: Public key type ? (2048/112 Bits/secBits), signed using sha256WithRSAEncryption
* Certificate level 2: Public key type ? (2048/112 Bits/secBits), signed using sha256WithRSAEncryption
* using HTTP/1.x
> GET / HTTP/1.1
> Host: ***
> User-Agent: curl/8.6.0
> Accept: */*
>
* old SSL session ID is stale, removing
그 이유는 무엇입니까? 죄송합니다. 웹사이트 주소를 공개할 수 없습니다. 위의 내용이 어느 정도 밝혀지기를 바랍니다. 브라우저에 모든 요청 헤더를 추가하려고 시도했지만 동작이 변경되지 않았습니다.
DNS 조회에는 다음 정보가 표시됩니다.
*** is an alias for ***.edgekey.net.
***.edgekey.net is an alias for ***.akamaiedge.net.
***.akamaiedge.net has address ***
***.akamaiedge.net has IPv6 address ***
***.akamaiedge.net has IPv6 address ***
편집: 추가 조사 결과, 컬뿐만 아니라 내가 시도한 모든 비 브라우저 클라이언트(SSL 인증서를 얻기 위한 우편 배달부, 컬, wget, openssl s_client)가 시간 초과되었습니다. 페이지를 가져오기 위해 브라우저와 마찬가지로 컬/우편 배달부와 똑같은 요청 헤더를 사용해 보았지만 성공하지 못했습니다.
답변1
다른 사람들이 지적했듯이 웹사이트의 robots.txt에 이 내용이 있는지 확인하세요.
User-Agent: curl
Disallow: /
거기에 있으면 해당 특정 웹 사이트에서 컬을 사용할 수 없습니다
그렇다면 이 일은 할 수 없다.어느기다
User-agent: *
Disallow: /
찾으려면 URL 뒤에 /robots.txt를 입력하세요.example.com/robots.txt
답변2
다음 헤더를 추가하여 컬 요청이 작동하도록 했습니다. 이들 모두가 필요하며 User-Agent 헤더만으로는 충분하지 않습니다.
> User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:123.0) Gecko/20100101 Firefox/123.0
> Accept-Language: en-US,en;q=0.5
> Accept-Encoding: gzip, deflate, br
> Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
브라우저 개발자 콘솔의 네트워크 탭에 있는 요청 헤더를 보면 이를 알 수 있습니다.
Accept 헤더는 간단히 Accept: */*
.
답변3
제가 팔로우하고 있는 사이트에도 같은 문제가 있습니다(그래서 내가 먼저 당신에게 질문을 한 거예요.). 이상한 점은 내가 이 사이트를 curl
수년 동안 아무 문제 없이 팔로우(사용)해 왔다는 것입니다. 그러나 이제 이것이 "문제"가 되었습니다! 아마도 이것은경향?
어쨌든 - 귀하의 질문을 읽은 후 나에게 적합한 솔루션을 찾았습니다. lynx
-"명령줄"브라우저. lynx
옵션이 많기 때문에 독서 man lynx
등에 시간을 투자하는 것이 좋습니다. 나에게 도움이 된 것은 다음과 같습니다.
lynx -dump -accept_all_cookies 'https://wherever.com/viewtopic.php?t=abc123' > my-dump.txt