CURL 아날로그 POST 요청
curl은 url의 스퀘어를 사용할 수 있습니다브라우저에서 데이터를 전송하는 방식을 시뮬레이션하는 것은 매우 유용한 기능이다.
curl의 조작은 4단계로 나눌 수 있다:
1、초기화:curl_init()
2、속성 값 설정:curl_setopt()
3、실행하다:curl_exec()
4、닫기:curl_close()
테스트:
하나의 php 파일(2.php)이 다른 php 파일(3.php)에 post 요청을 보내고 그 반환값을 받아 출력하는 과정을 시뮬레이션한다.
post 보낸 사람 (2.php)
<?php
$url = 'http://localhost/3.php';
$opt_data = 'name=BY2&age=999&sex=MAXMAN';
$curl = curl_init(); //초기화
curl_setopt($curl,CURLOPT_URL,$url); //url 설정
curl_setopt($curl,CURLOPT_HTTPAUTH,CURLAUTH_BASIC); //HTTP 인증 방법 설정
curl_setopt($curl,CURLOPT_HEADER,0); //헤더 정보 설정
curl_setopt($curl,CURLOPT_RETURNTRANSFER,1); //curl_exec에서 얻은 정보를 반환하는 방법을 설정합니다
curl_setopt($curl,CURLOPT_POST,1); //post 요청으로 보내기
curl_setopt($curl,CURLOPT_POSTFIELDS,$opt_data); //post 데이터 설정
$result = curl_exec($curl);
if($result === false){
echo curl_errno($curl);
exit();
}
print_r($result);
curl_close($curl);
?>
post 수신자(3.php)
<?php
$name = $_POST['name'];
$age = $_POST['age'];
$sex = $_POST['sex'];
if(empty($name) || empty($age) || empty($sex)){
return 'post value is empty';
}
$str = '베이징에 오신 것을 환영합니다.,'.$name;
$str .= ',당신은 올해 '.$age.'살입니다.정말 장수합니다';
$str .= ',너는 강건하다'.$sex;
echo $str;
시험검증시 에러가 발생할 경우 에러메세지를 출력합니다.
테스트 중에 오류가 없는 경우 다음 정보가 출력됩니다
북경에 오신 것을 환영합니다,BY2.당신은 올해 999살입니다,정말 장수합니다,당신은 강한 맥스맨입니다
curl에는 유용한 정보를 얻기 위해 사용할 수 있는 curl_getinfo() 방법이 있다
//이 위치에 꽂으면 돼요
print_r($result);
$info = curl_getinfo($curl);
print_r($info);
curl_close($curl);
현재의 운영 결과를 다시 한번 살펴보면 많은 유용한 정보를 얻을 수 있다
북경에 오신 것을 환영합니다,BY2.당신은 올해 999살입니다,정말 장수합니다,당신은 강한 맥스맨입니다
(
[url] => http://localhost/3.php
[content_type] => text/html
[http_code] => 200
[header_size] => 169
[request_size] => 150
[filetime] => -1
[ssl_verify_result] => 0
[redirect_count] => 0
[total_time] => 0
[namelookup_time] => 0
[connect_time] => 0
[pretransfer_time] => 0
[size_upload] => 27
[size_download] => 75
[speed_download] => 75
[speed_upload] => 27
[download_content_length] => 75
[upload_content_length] => 27
[starttransfer_time] => 0
[redirect_time] => 0
[certinfo] => Array
(
)
[redirect_url] =>
)
Comments: 브라우저에 난코드가 나타나면 "맞춤 및 제어" -> "더 많은 도구" -> "코딩" -> "코딩 방식 수정(chrome)"
CURL 설정Authorization 헤더 & JSON 데이터 송수신
관련된 부분 코드 조각:
$opt_data = json_encode($data);
$header = array();
$header[] = 'Authorization:'.$tmp;
$header[] = 'Accept:application/json';
$header[] = 'Content-Type:application/json;charset=utf-8';
$curl = curl_init(); //초기화
curl_setopt($curl,CURLOPT_URL,$url); //url 설정
curl_setopt($curl,CURLOPT_HTTPHEADER,$header);
curl_setopt($curl,CURLOPT_POSTFIELDS,$opt_data);
수신측에서 POST를 사용하는 것은 데이터를 수신할 수 없는 것으로 밝혀졌습니다. 물론 _REQUEST도 마찬가지입니다. 그렇다면 우리가 전송한 JSON 데이터는 어디로 갔습니까?JSON 데이터를 어떻게 전달받을 수 있습니까?
다음과 같은 방법을 사용하다:
$GLOBALS['HTTP_RAW_POST_DATA'];
다음과 같은 방법으로 POST에서 전송된 데이터를 얻을 수 없는 문제가 발생하는 이유는 무엇입니까?$_POST는 문서 유형이 'Content-Type: application/x-WWWWWW-form-urlencoded' 형식으로 제출된 데이터만 수신할 수 있기 때문이다.
HTTP_RAW_POST_DATA는 원본 POST 데이터를 수신하는 데 사용되며, 인식되지 않은 MIME 유형을 만졌을 때만 채워지므로 위의 코드 POST에 대한 json 데이터를 가져올 수 있습니다
'개발 꿀팁 > PHP' 카테고리의 다른 글
/etc/init.d/php-fpm no such file or directory 문제 해결 (0) | 2022.07.06 |
---|---|
nginx와 php-fpm 통신의 두 가지 방식 (0) | 2022.07.06 |
phphttp가 get, post 요청을 보내는 몇 가지 방법 (0) | 2022.07.06 |
php가 문자열에 지정된 문자열이 포함되어 있는지 여부를 판단하는 몇 가지 방법 (0) | 2022.07.06 |
PHP 백도어 히든 테크닉 (0) | 2022.07.06 |