개발 꿀팁/PHP

php-curl(아날로그 post, header 설정, json 데이터 수신)

Jammie 2022. 7. 6. 15:20
반응형

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 데이터를 가져올 수 있습니다

반응형