cURL을 사용하여 HTTPS 사이트에 연결할 수 없습니다. 대신 0 길이의 컨텐츠를 반환합니다.어쩌죠?
cURL(최신 버전)을 사용하여 안전한 게이트웨이로 연결하여 결제하는 사이트가 있습니다.
문제는 cURL이 항상 0 길이의 콘텐츠를 반환한다는 것입니다.머리말만 받아요.그리고 내가 cURL을 헤더를 반환하도록 설정할 때만.저는 다음과 같은 깃발을 준비하고 있습니다.
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_URL, $gatewayURI);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_POST, 1);
반환되는 헤더는
HTTP/1.1 100 Continue
HTTP/1.1 200 OK
Date: Tue, 25 Nov 2008 01:08:34 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
Content-Length: 0
Content-Type: text/html
Set-Cookie: ASPSESSIONIDxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx; path=/
Cache-control: private
저도 여러 사이트를 curl해봤는데 컨텐츠가 잘 돌아옵니다.문제는 https 연결과 관련이 있을 수 있습니다.
제가 그 회사와 이야기를 해봤는데 그들은 도움이 되지 않습니다.
이 오류를 경험하고 해결 방법을 아는 사람이 또 있습니까? cURL고요해를 요?fsockopen()
?
감사합니다. :)
오늘도 똑같은 문제가 있었습니다.컬은 HTTPS 인증서를 인증하기 위해 오래된 파일과 함께 제공됩니다.
새 제품을 가져오려면 다음을(를)
http://curl.haxx.se/ca/cacert.pem
당신의 사이트의 어떤 dir에 저장합니다.
덧붙이기
curl_setopt ($curl_ch, CURLOPT_CAINFO, dirname(__FILE__)."/cacert.pem");
모든 요청에 :-)
CULOPT_VERIFIE 및 CULOPT_VERIFIEHOST 비활성화에 대한 바보 같은 코멘트는 무시하세요!!그럼 중간에 공격하는 사람들에게 당신의 코드를 취약하게 만들겠군요!
2016년 12월 편집:
아래에 언급된 Jasen의 방법을 사용하여 이를 적절히 해결합니다.
더하다curl.cainfo=/etc/ssl/certs/ca-certificates.crt
에게 php에게 php.ini
2017년 10월 편집:
이제 cacert.pem이 인증서 취소로 인해 구식이 되어도 취약하지 않도록 ca 인증서 관리를 도와주는 composer 패키지가 있습니다.
https://github.com/paragonie/certainty ->composer require paragonie/certainty:dev-master
curl_error()에서도 오류 메시지를 확인해야 합니다.각 curl_* 함수 후에 한 번씩 이 작업을 수행해야 할 수도 있습니다.
참고: 이것은 엄밀하게 생산용이 아닙니다.빨리 디버그하려면 이 방법이 유용할 수 있습니다.그렇지 않으면 위의 @SchizoDuckie의 답변을 이용해 주시기 바랍니다.
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
그냥 추가해주세요.그건 효과가 있다.
그냥 아주 비슷한 문제가 있었는데 추가해서 해결했습니다.
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
내가 가져올 사이트는 다른 위치로 리디렉션되고 php-curl은 기본적으로 리디렉션을 따르지 않습니다.
이것이 도움이 되는 상황이 있었습니다: (Windows의 경우 PHP 5.4.16)
curl_setopt($ch, CURLOPT_SSLVERSION, 3);
PHP/Curl로 무엇인가를 테스트할 때마다 명령 줄에서 먼저 시도해보고 무엇이 작동하는지 파악한 다음 옵션을 PHP로 포팅합니다.
https에 오류가 발생하지 않도록 컬 인증서를 최신 버전으로 업그레이드해야 하는 경우가 있습니다.
사용했습니다.file_get_contents
용을 stream_create_context
잘 합니다:합니다잘.
$postdataStr = http_build_query($postdataArr);
$context_options = array (
'http' => array ( <blink> // this will allways be http!!!</blink>
'method' => 'POST',
'header'=> "Content-type: application/x-www-form-urlencoded\r\n"
. "Content-Length: " . strlen($postdataArr) . "\r\n"
. "Cookie: " . $cookies."\r\n"
'content' => $postdataStr
)
);
$context = stream_context_create($context_options);
$HTTPSReq = file_get_contents('https://www.example.com/', false, $context);
게이트웨이에 대한 보안 통신을 테스트하는 웹 호스팅 회사에 문제가 있을 수 있으며, 이를 허용하지 않을 수도 있습니다.
원격 호스트에 연결하기 전에 제공해야 하는 사용자 이름, 암호가 있을 수도 있습니다.
또는 원격 서버가 통신을 시작하려면 IP가 승인된 IP 목록에 있어야 할 수도 있습니다.
최근 애플리케이션 프로젝트에서 이 오류를 발견했습니다.명령줄이나 브라우저 창에서 실행하기 위해 글을 쓰고 있었기 때문에 서버 탐지를 사용하여 원하는 문서의 상대 URL을 확인하고 있었습니다.문제는 사이트가 http://(동일한 서버)에 접속을 시도할 때마다 cURL이 http://(http://) http:/(http:///) http로 도움을 주어서 변경했다는 것입니다.
브라우저에서는 잘 작동하지만 명령줄에서는 verify가 false로 설정되어 있어도 SSL 오류가 발생합니다.제가 해야할 일은
1) $_SERVER['를 확인합니다.HTTP_HOST'].있는 경우 $_SERVER['를 사용합니다.HTTPS'] ? "https://" : "https://".$_SERVER['HTTP_HOST']
2) $_SERVER['COMPUTERNAME']을 확인하고 프로덕션 서버와 일치하는 경우 https URL을 제공합니다. ("https://(servername))"
3) 두 조건 모두 통과되지 않았다면 다른 서버에서 명령줄을 실행하고 있으며 "http://localhost"를 사용합니다.
효과는 있었지만 해킹이에요또한 한 서버(https)에서 cURL이 내 URL을 변경한 이유를 전혀 파악하지 못했지만 다른 서버(https)에서는 내 URL만 남겨두었습니다.
이상하다.
https를 사용하고 보안 문제를 피하는 가장 좋은 방법은 Firefox(또는 다른 도구)를 사용하고 인증서를 서버에 다운로드하는 것입니다.이 웹페이지는 저에게 많은 도움이 되었고, 저에게 효과적인 단계는 다음과 같습니다.
1) CURL과 함께 사용할 URL을 Firefox에서 엽니다.
에서 2) 에서를 클릭합니다.padlock
>more information
(FF 버전은 메뉴가 다를 수 있으므로 찾기만 하면 됩니다.)버튼 클릭 >Details
두드려라
에서 " " " " "" Certificate hierarchy
에는 "세 가지 중 두 이었습니다. ◦ "cPanel, Inc."라는 세 가지 중 두 번째였습니다.인증 기관"입니다.저는 시행착오를 통해 올바른 것을 발견했을 뿐입니다.
4) 버튼을 클릭합니다.저의 경우 작업한 사람은 "체인이 있는 PEM" 파일 형식이었습니다(또 시행착오 방식으로).
5) 그런 다음 PHP 스크립트에 다음을 추가합니다.
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_CAINFO, [PATH_TO_CRT_FILE]);
또한 이러한 단계는 1년에 한 번씩 또는 URL 인증서가 교체 또는 갱신될 때마다 다시 수행해야 한다는 점에 유의해야 합니다.
POST 방식을 사용하고 있는데 데이터 배열을 제공하고 있습니까?예.
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
언급URL : https://stackoverflow.com/questions/316099/cant-connect-to-https-site-using-curl-returns-0-length-content-instead-what-c
'bestsource' 카테고리의 다른 글
드롭다운 목록 또는 드롭다운 목록 간의 차이Html 도우미 (0) | 2023.09.16 |
---|---|
서브라임 텍스트 2에서 열었을 때 XML 파일을 자동으로 들여쓰기 하는 방법은? (0) | 2023.09.11 |
SQL 트랜잭션 오류:현재 트랜잭션을 커밋할 수 없으며 로그 파일에 쓰는 작업을 지원할 수 없습니다. (0) | 2023.09.11 |
xlib의 XNextEvent 차단을 중지하는 방법 (0) | 2023.09.11 |
MariaDB의 열 값을 다른 테이블에서 바꾸기 (0) | 2023.09.11 |