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

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

QA

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

답변 3

본문

포스트맨으로 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);
}

 

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

 

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

 

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

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

 

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

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
filter #api ×
전체 263
© SIRSOFT
현재 페이지 제일 처음으로