php 사용 curl 상세 해석 및 문제 집합
0.컬 은 무엇 인가
PHP supports libcurl, a library created by Daniel Stenberg, that allows you to connect and communicate to many different types of servers with many different types of protocols. libcurl currently supports the http, https, ftp, gopher, telnet, dict, file, and ldap protocols. libcurl also supports HTTPS certificates, HTTP POST, HTTP PUT, FTP uploading (this can also be done with PHP's ftp extension), HTTP form based upload, proxies, cookies, and user+password authentication.
이것 은 PHP 가 curl 에 대한 설명 입 니 다.쉽게 말 하면 curl 은 하나의 라 이브 러 리 로 URL 을 통 해 다양한 서버 와 결탁 하고 말 을 걸 며 깊이 있 게 교류 할 수 있 으 며 많은 프로 토 콜 도 지원 합 니 다.또한 curl 은 https 인증,http post,ftp 업로드,대리,cookies,간단 한 구령 인증 등 기능 을 지원 할 수 있다 고 말 했다.그렇게 많은 말 을 했 는데 별로 느낌 이 없 었 죠?응용 프로그램 에서 만 느낌 이 들 었 어 요.저도 처음에 서버 에서 다른 서버 에 POST 요청 을 해 야 curl 을 접 하기 시 작 했 어 요.그리고 느낌 이 들 었 어 요.
본 격 적 으로 어떻게 사용 하 는 지 말 하기 전에 먼저 한 마디 하 세 요.당신 은 PHP 환경 에서 curl 모듈 을 설치 하고 사용 해 야 합 니 다.구체 적 인 방식 은 말 하지 않 겠 습 니 다.시스템 에 따라 설치 방식 이 다 릅 니 다.google 에서 찾 아 보 거나 PHP 공식 문 서 를 찾 아 보 는 것 도 간단 합 니 다.
1.가 져 와 서 먼저 손 을 시험 해 본다.
도 구 를 손 에 넣 으 면 먼저 놀 고,손 에 들 어 오 는 지 시험 해 봐 야 한다.그렇지 않 으 면 가 져 오 자마자 쓰 고,너의 코드 를 난 장 판 으로 만 들 었 는데 어떻게 서버 를 건 드 리 겠 니?
예 를 들 어 우 리 는 유명한'인터넷 연결 여 부 를 테스트 하 는'사이트 인 바 이 두 를 예 로 들 어 curl 을 시도 한다.
<?php
// create curl resource
$ch = curl_init();
// set url
curl_setopt($ch, CURLOPT_URL, "baidu.com");
//return the transfer as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// $output contains the output string
$output = curl_exec($ch);
//echo output
echo $output;
// close curl resource to free up system resources
curl_close($ch);
?>
로 컬 환경 브 라 우 저 에서 이 phop 파일 을 열 었 을 때 페이지 에 바 이 두 의 첫 페이지 가 나 타 났 습 니 다.제 가 방금 입력 한"localhost"는 요?위의 코드 와 주석 은 이 코드 가 무엇 을 하고 있 는 지 충분히 설명 했다.
$ch = curl_init(),
curl 세 션 자원 을 만 들 고 핸들 을 되 돌려 주 는 데 성공 했다.curl_setopt($ch, CURLOPT_URL,"baidu.com"),URL 설정,말 할 필요 도 없 음;
위의 두 문장 을 합쳐서$ch=curlinit("baidu.com");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0)
이것 은 응답 결 과 를 변수 에 저장 할 지 여 부 를 설정 하 는 것 입 니 다.1 은 저장 하고 0 은 직접 echo 입 니 다.$output = curl_exec($ch)
실행 한 다음 에 응답 결 과 를$output 변수 에 저장 하여 아래 echo 를 제공 합 니 다.curl_close($ch)이 curl 세 션 자원 을 닫 습 니 다.
PHP 에서 curl 을 사용 하 는 것 은 크게 이러한 형식 입 니 다.그 중에서 두 번 째 단 계 는 curl 을 통 해setopt 방법 으로 파 라 메 터 를 설정 하 는 것 이 가장 복잡 하고 가장 중요 합 니 다.관심 이 있 으 면 공식 적 으로 설정 가능 한 매개 변수 에 대한 상세 한 참 고 를 볼 수 있 습 니 다.길 게 보면 토 할 것 같 습 니 다.수요 에 따라 능숙 해 지 는 것 이 좋 겠 습 니 다.
요약 하면 phop 에서 curl 용법 은 curl 세 션 만 들 기->설정 인자->실행->세 션 닫 기 입 니 다.
다음은 우리 가 자주 사용 하 는 상황 을 살 펴 보 겠 습 니 다.우 리 는 어떻게 자신 을 꾸 미 는 지(매개 변 수 를 설정)해 야 정확하게'여동생 을 꼬 실 수 있 습 니 다'(서버 에 정확하게 꼬 실 수 있 습 니 다).
2.인사-GET 와 POST 요청 및 HTTPS 프로 토 콜 처리
먼저 서버 에 인 사 를 드 리 겠 습 니 다.서버 에 Hello 를 보 내 주세요.여기 서 가장 편리 한 방법 은 서버 에 GET 요청 을 하 는 것 입 니 다.물론 POST 라 는 작은 쪽지 도 OK 입 니 다.
2.1 GET 요청
우 리 는'어떤 유명 동성 교우 사이트 github 에서 키 워드 를 검색 합 니 다'를 예 로 들 었 다.
// curl GET
<?php
// create curl resource
$ch = curl_init();
// set url
curl_setopt($ch, CURLOPT_URL, "https://github.com/search?q=react");
//return the transfer as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// $output contains the output string
$output = curl_exec($ch);
//echo output
echo $output;
// close curl resource to free up system resources
curl_close($ch);
?>
이전의 그 예 와 별 차이 가 없 는 것 같 지만,여기에 두 가지 제기 할 점 이 있다.1.기본 요청 방식 은 GET 이 므 로 GET 방식 을 명시 적 으로 지정 할 필요 가 없습니다.
2.https 요청,http 요청 이 아 닙 니 다.여러 곳 에서 HTTPS 요청 을 본 적 이 있 을 수 있 습 니 다.SSL 인증서 의 검 사 를 몇 줄 더 해서 자원 을 성공 적 으로 요청 해 야 합 니 다.그런데 여기 에는 필요 하지 않 은 것 같 습 니 다.이 유 는 무엇 입 니까?
The two Curl options are defined as:
CURLOPT_SSL_VERIFYPEER - verify the peer's SSL certificate
CURLOPT_SSL_VERIFYHOST - verify the certificate's name against host
They both default to true in Curl, and shouldn't be disabled unless you've got a good reason. Disabling them is generally only needed if you're sending requests to servers with invalid or self-signed certificates, which is only usually an issue in development. Any publicly-facing site should be presenting a valid certificate, and by disabling these options you're potentially opening yourself up to security issues.
즉,불법 또는 자체 제작 인증 서 를 사용 하지 않 는 한 대부분 개발 환경 에 나타 나 야 이 두 줄 을 false 로 설정 하여 ssl 인증서 검 사 를 피 할 수 있 습 니 다.그렇지 않 은 사람 은 이렇게 하지 않 아 도 됩 니 다.이렇게 하 는 것 은 안전 하지 않 습 니 다.2.2 POST 요청
그러면 POST 요청 은 어떻게 하나 요?테스트 를 위해 한 테스트 서버 에 POST 를 받 는 스 크 립 트 를 보 냈 습 니 다.
//testRespond.php
<?php
$phpInput=file_get_contents('php://input');
echo urldecode($phpInput);
?>
일반 데이터 보 내기그리고 로 컬 에 요청 을 쓰 십시오:
<?php
$data=array(
"name" => "Lei",
"msg" => "Are you OK?"
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http:// IP /testRespond.php");
curl_setopt($ch, CURLOPT_POST, 1);
//The number of seconds to wait while trying to connect. Use 0 to wait indefinitely.
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 60);
curl_setopt($ch, CURLOPT_POSTFIELDS , http_build_query($data));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
echo $output;
curl_close($ch);
?>
브 라 우 저 실행 결 과 는:name=Lei&msg=Are you OK?
여기 서 우 리 는 POST 데이터 로 서버 에 전송 하 는 배열 을 만 들 었 습 니 다.
curl_setopt($ch, CURLOPT_POST,1)POST 요청 임 을 나타 낸다.
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,60)가장 오래 참 을 수 있 는 연결 시간 을 설정 합 니 다.초 단위 로 미라 가 될 때 까지 기다 릴 수 는 없 잖 아 요.
curl_setopt($ch, CURLOPT_POSTFIELDS , http_build_query($data)는 POST 의 데이터 필드 를 설정 합 니 다.여 기 는 배열 데이터 형식 이기 때문에 httpbuild_query 처리 해 주세요.
제 이 슨 데이터 에 대해 서 는 어떻게 POST 요청 을 합 니까?
<?php
$data='{"name":"Lei","msg":"Are you OK?"}';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http:// IP /testRespond.php");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 60);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'Content-Length:' . strlen($data)));
curl_setopt($ch, CURLOPT_POSTFIELDS , $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
echo $output;
curl_close($ch);
?>
브 라 우 저 실행,표시:{"name":"Lei","msg":"Are you OK?"}
3.파일 업로드 및 다운로드 방법
이미 서버 와 꼬 였 으 니 이 럴 때 는 사진 을 받 아 봐 야 겠 지.너 도 자신의 사진 을 올 려 보 여 줘 야 겠 다.두 사람 이 함께 있 는 것 은 외모 가 중요 하지 않 지만 남 준 녀 예 는 항상 최고 다.
3.1 자신의 사진 한 장 을 전송 하여 과거 에 성 의 를 표 하 다―POST 가 파일 을 업로드 하 다
같은 원 격 서버 에서 우 리 는 먼저 수신 스 크 립 트 를 전송 하고 그림 을 받 아 로 컬 에 저장 합 니 다.파일 과 폴 더 권한 문제 에 주의 하고 쓰기 권한 이 필요 합 니 다.
<?php
if($_FILES){
$filename = $_FILES['upload']['name'];
$tmpname = $_FILES['upload']['tmp_name'];
//
if(move_uploaded_file($tmpname,dirname(__FILE__).'/'.$filename)){
echo (' ');
}
}
?>
그리고 로 컬 서버 의 php curl 부분 을 다시 쓰 겠 습 니 다.
<?php
$data = array('name'=>'boy', "upload"=>"@boy.png");
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http:// /testRespond.php");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 60);
curl_setopt($ch, CURLOPT_POSTFIELDS , $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
echo $output;
curl_close($ch);
?>
브 라 우 저 에서 실행 해 보 세 요.모든 것 이 쌀 로 되 어 있 습 니 다.원 격 서버 를 보 러 가 보 았 지만 아무것도 올 리 지 못 했 습 니 다.왜 이러 지?위의 코드 는 여러분 이 curl phop POST 그림 을 검색 할 때 가장 흔히 볼 수 있 는 코드 일 것 입 니 다.이것 은 제 가 현재 사용 하고 있 는 것 은 PHP 5.6 이상 버 전 입 니 다.@기 호 는 PHP 5.6 이후 에 버 려 졌 습 니 다.PHP 5.3 은 여전히 사용 할 수 있 기 때문에 일부 학생 들 은 실행 할 수 있다 는 것 을 발 견 했 습 니 다.대부분 PHP 버 전이 다 르 고 curl 은 이 두 버 전에 서 호 환 되 지 않 기 때 문 입 니 다.위 는 PHP 5.3 의 실현 이다.
다음은 PHP 5.6 및 이후 의 실현,
<?php
$data = array('name'=>'boy', "upload"=>"");
$ch = curl_init();
$data['upload']=new CURLFile(realpath(getcwd().'/boy.png'));
curl_setopt($ch, CURLOPT_URL, "http://115.29.247.189/test/testRespond.php");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 60);
curl_setopt($ch, CURLOPT_POSTFIELDS , $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
echo $output;
curl_close($ch);
?>
여기 서 CURLFile 대상 을 도입 하여 이 를 실현 합 니 다.이에 대해 구체 적 으로 문 서 를 찾 아 볼 수 있 습 니 다.이때 원 격 서버 디 렉 터 리 에 가 보 니 사진 이 한 장 있 었 고 우리 가 방금 올 린 사진 이 확실 했다.3.2 원 격 서버 여동생 의 사진 가 져 오기-사진 캡 처
서버 여동생 도 성실 하 게 사진 을 보고 내 가 매우 자상 하고 눈 썰 미가 좋다 고 생각 하여 대범 하 게 자신의 사진 을 꺼 냈 다.그러나 좀 부 끄 러 운 것 은 그녀 가 주동 적 으로 가 져 오 려 고 하지 않 아서 우리 가 직접 가 져 가 야 한 다 는 것 이다.
원 격 서버 는 자신의 디 렉 터 리 에 girl.jpg 라 는 그림 을 저장 하고 주 소 는 웹 서버 루트 디 렉 터 리/girl.jpg 입 니 다.지금 이 사진 을 가 져 오 려 고 합 니 다.
<?php
$ch = curl_init();
$fp=fopen('./girl.jpg', 'w');
curl_setopt($ch, CURLOPT_URL, "http:// /girl.jpg");
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 60);
curl_setopt($ch, CURLOPT_FILE, $fp);
$output = curl_exec($ch);
$info = curl_getinfo($ch);
fclose($fp);
$size = filesize("./girl.jpg");
if ($size != $info['size_download']) {
echo " , ";
} else {
echo " ";
}
curl_close($ch);
?>
지금,우리 의 현재 목록 아래 에 방금 받 은 사진 이 한 장 있 습 니 다.매우 흥분 되 지 않 습 니까?여기 서 말 할 만 한 것 은 curlgetinfo 방법,이것 은 이번 요청 과 관련 된 정 보 를 얻 는 방법 으로 디 버 깅 에 도움 이 되 므 로 잘 사용 해 야 합 니 다.
4.HTTP 인증 어떻게
이때 서버 의 학부 모 는 우리 딸 이 아직 어 려 서 상 대 를 찾 을 수 없다 며 딸 을 가두 고 비밀번호 자 물 쇠 를 채 웠 다.이른바 HTTP 인증,서버 는 몰래 비둘기 에 게 HTTP 인증 사용자 이름과 비밀 번 호 를 주 었 다.만 나 서 도망 가라 고 했다.
그러면 사용자 이름과 비밀 번 호 를 받 았 는데 우 리 는 어떻게 PHP CURL 을 통 해 HTTP 인증 을 해결 합 니까?
PS:여기 서 게 으 름 을 피 우 면 HTTP 인증 을 받 지 않 고 코드 를 넣 어 보 겠 습 니 다.분석 해 보 겠 습 니 다.
function curl_auth($url,$user,$passwd){
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_USERPWD => $user.':'.$passwd,
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true
]);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
$authurl = 'http:// HTTP ';
echo curl_auth($authurl,'vace','passwd');
여기 재 미 있 는 곳 이 있 습 니 다.curl_setopt_array 이 방법 은 배열 을 통 해 여러 개의 인 자 를 한꺼번에 설정 하여 여러 곳 에서 설정 해 야 할 촘촘 한 curlsetopt 방법.
5.쿠키 를 이용 하여 로그 인 시 뮬 레이 션
이때 당신 은 서버 여동생 을 성공 적 으로 만 났 습 니 다.그녀 를 데 리 고 도망 가 려 고 했 지만 어 쩔 수 없 이 멀 지 않 았 습 니 다.서버 여동생 은 어머니 서버 에 금고 가 있 으 니 로그 인하 여 좀 내 려 올 수 있다 고 말 했 습 니 다.
먼저 분석 해 보 겠 습 니 다.이 일 은 두 단계 로 나 뉘 는데 하 나 는 로그 인 인터페이스 에서 계 정 비밀 번 호 를 통 해 로그 인 한 다음 에 쿠키 를 얻 는 것 입 니 다.다른 하 나 는 쿠키 를 이용 하여 정보 페이지 에 로그 인하 여 정 보 를 얻 는 것 입 니 다.대체적인 구 조 는 이 렇 습 니 다.
<?php
// post
$post = array (
'email' => ' ',
'pwd' => ' '
);
//
$url = " ";
// cookie
$cookie = dirname(__FILE__) . '/cookie.txt';
//
$url2 = " ";
//
login_post($url, $cookie, $post);
//
$content = get_content($url2, $cookie);
// cookie
@ unlink($cookie);
var_dump($content);
?>
그리고 우 리 는 다음 두 가지 방법의 실현 을 생각한다.
login_post($url, $cookie, $post)
get_content($url2, $cookie)
//
function login_post($url, $cookie, $post) {
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 0);
curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($post));
curl_exec($curl);
curl_close($curl);
}
//
function get_content($url, $cookie) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);
$rs = curl_exec($ch);
curl_close($ch);
return $rs;
}
이로써 아 날로 그 로그 인 에 성 공 했 습 니 다.모든 것 이 순 조 롭 습 니 다.phop CURL 을 통 해 서버 를 건 드 리 는 것 이 이렇게 간단 합 니 다.물론 CURL 의 능력 은 여기에 그 치지 않 는 다.본 고 는 백 엔 드 PHP 개발 에서 가장 많이 사용 되 는 몇 가지 장면 에 대해 정리 하고 요약 하고 자 한다.마지막 한 마디 로 구체 적 인 문 제 를 구체 적 으로 분석 하 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Laravel - 변환된 유효성 검사 규칙으로 API 요청 제공동적 콘텐츠를 위해 API를 통해 Laravel CMS에 연결하는 모바일 앱(또는 웹사이트) 구축을 고려하십시오. 이제 앱은 CMS에서 번역된 콘텐츠를 받을 것으로 예상되는 다국어 앱이 될 수 있습니다. 일반적으로 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.