포스트맨으로 정상동작하는 api가 php소스로 구현할때 안되는 이유가 있나요?

포스트맨으로 정상동작하는 api가 php소스로 구현할때 안되는 이유가 있나요?

QA

포스트맨으로 정상동작하는 api가 php소스로 구현할때 안되는 이유가 있나요?

본문

포스트맨으로 api 테스트완료하고 php 소스로 api 연동해서  정상적으로 사용하고 있었습니다.

몇일전부터  php 소스로 api 연동한 작업이 안되고있어요

포스트맨으로는 정상동작합니다. ( 둘다안되면 api문제라 확신하는데..)

php 코드가 문제라면 처음부터 동작을 안했어야하는데 잘되던게 최근에 안됩니다.
제 생각에는...
서버쪽 포트나 다른 설정을 바꿨을거라 추측이 되고있습니다만,

어떤경우에 이럴수 있는지
다른분들 의견을 듣고싶습니다..

print_r  결과는 500 에러입니다.

참고로 curl은 막히지 않았습니다. 다른 api는 다 동작합니다.
$s_token 토큰도 정상적인 값이 들어있습니다.

 

3731836666_1632885107.7595.png

 



$url = "http://~api주소~~";
    $p_data = array(
    "amount" => $s_point
    );
   $data_string = json_encode($p_data);
   $headers = "Authorization: Bearer ".$s_token;
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, 1); //전달 데이터를 POST 형식으로 전달
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string ); //전달할 데이터값
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,true); //TRUE 설정 시 curl_exec () 반환 값을 문자열로 반환
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false );
    curl_setopt($ch, CURLOPT_COOKIE, '' );
    curl_setopt($ch, CURLOPT_HTTPHEADER, array( $headers, 'Content-Type: application/json') );
    $g = curl_exec($ch); //curl 실행
    curl_close($ch); //curl 세션 닫기
    $info = json_decode($g, true);
 
print_r($g);
print_r($info);

이 질문에 댓글 쓰기 :

답변 3

1. postman 으로 전송시 요청된 의 헤더 값을 보고 다 넣어본다.

2. 하나씩 빼본다

 

아마 referer 나 origin 문제가 아닐까 생각해봅니다.

postman 으로 전송시 요청된 헤더값을 몽땅 넣어보며 테스트해보니

headers[] = "User-Agent:PostmanRuntime/7.26.8";

이코드가 들어가야 적용이 되네요.
희안하네요..  어떤설정이 바꼈길래  저런 헤더정보가 넘어가야 된다니..

덕분에 해결했습니다 감사합니다.

아마 User-Agent 를 확인하는 코드가 들어갔을겁니다.
브라우저 구분을 위해서든지 뭐 그런 용도겠죠?

제가 쓰는 safari 는 user-agent 가 "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.3 Safari/605.1.15"

이런식이네요

오류메시지 출력되도록 켜시고

오류 메시지를 확인해보시기 바랍니다

<?php

error_reporting(E_ALL);
ini_set("display_errors", 1);
 

?>

api 통신의 경우 수발신 모두 확인해보셔야 합니다.

1. 수신 받는 쪽 서버에서 전송데이터가 제대로 받고있는지

2. 수신받는쪽 서버에서 발신서버 쪽으로 결과 데이터를 제대로 전달하는지

 

============= 위2개가 아무 문제가 없다면

3. 



if (curl_errno($ch)) {
    $error_msg = curl_error($ch);
}

 

추가하여 에러메시지를 확인해보시기 바랍니다.

 

=======================

 

기존에 정상적으로 동작하던 기능이면 코드의 문제 보다는

전송 데이터 의 문제(값이 없다든지)( , 서버 설정의 문제(갑자기 바뀌었다든지)

 

등 다양한 원인이 있을수있습니다

답변을 작성하시기 전에 로그인 해주세요.
전체 258
QA 내용 검색
filter #api ×

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT