PHP의 cURL 라이브러리에는 주로 두 가지 Request와 Guzzle이 있는데 둘 다 매우 복잡합니다.
cURL을 먼저 사용하는 요청입니다. cURL이 없으면 전송을 수동으로 지정하지 않는 한 fsocket이 자동으로 활성화됩니다.
Guzzle은 풍부한 로그 라이브러리 지원과 로그 형식을 갖추고 있으며, 구독을 위해 플러그인 구독을 사용합니다. 코드 관점에서 볼 때 이벤트 메커니즘을 사용하며 품질이 더 높습니다.
cURL(최소한 v3만)만 지원하고 ReactPHP가 사용하는 Symfony의 EventEmitter를 사용합니다.
최근(2014-03-28) v3.8.1에서 v4.0.0rc로 업그레이드된 것을 확인했는데, 네임스페이스가 실제로 변경되어 처음 두 문단이 한 문단으로 줄어들었습니다. 레벨 Guzzle도 소스 코드 디렉토리에서 제거되었습니다. 이는 의미가 없으며 다른 일반적인 PHP 라이브러리와 호환되거나 일관성이 없습니다.
지금이 핵심입니다. 평소에는 거즐을 잘 사용하고 있는데 어제 원격사이트가 있는데 알리페이로 가서 결제 결과를 확인해야 하는 문제를 발견했습니다. 이 URL을 호출하면 Guzzle은 성공하지 못하지만 요청은 성공합니다.
다음은 cURL 명령에 대한 내용으로, connect-timeout과 timeout-max라는 두 가지 시간 제한이 있으며(후자는 일반적으로 프로그램에서 timeout이라고 함) 후자에 전자가 포함됩니다. , cURLl의 기본 연결 시간 제한은 300초이며 timeout-max에는 값이 설정되어 있지 않지만 포함되어 있으므로 시간 제한을 설정하지 않으면 최소 300초가 됩니다.
PHP의 fsocket의 경우 php.ini에 default_socket_timeout 설정 항목이 있기 때문에 기본값은 60초에 불과합니다.
또한 cURL은 기본적으로 http 리디렉션을 지원하지 않으며 -L 옵션(매개변수 없음)을 전달해야 합니다. 그러나 PHP 및 Python을 사용한 경험에 따르면 많은 cURL 라이브러리는 기본적으로 리디렉션을 활성화합니다. 적어도 Guzzle의 문서에는 켜져 있다고 명시되어 있습니다. 필요한 경우 수동으로 꺼야 합니다.
기준:
curl의 기본 연결 시간 제한은 300초입니다.