채택완료

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

2021-09-29 (수) 12:11:58 2,069

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

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

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

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

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

print_r  결과는 500 에러입니다.

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

3731836666_1632885107.7595.png

Copy
$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개 / 댓글 4개

채택된 답변
+20 포인트
2021-09-29 (수) 12:36:16

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

2. 하나씩 빼본다

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

답변에 대한 댓글 2개

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"

이런식이네요
2021-09-29 (수) 12:33:18

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

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

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

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

3. 

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

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

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

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

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

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

답변에 대한 댓글 1개

답변 감사드립니다.
덕분에 해결했습니다. 채택 못해드려서 죄송합니다.
2021-09-29 (수) 12:13:30

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

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

<?php

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

?>

답변에 대한 댓글 1개

그렇게 확인해도 오류 메세지가 없습니다.
코드 자체는 에러가 없는 코드이며 , 통신관련이라
에러는 출력되지 않습니다..

참고로.. 기존에 정상적으로 서비스하던 코드입니다.

답변을 작성하려면 로그인이 필요합니다.