채택완료

프로토콜이 다른경우 제이쿼리 데이터 로드

2022-06-15 (수) 16:52:41 1,686

안녕하세요.

https://www.aaa.com

도메인에서

http://www.bbb.com

도메인의 api를 호출하여

제이쿼리로 데이터를 읽어오지 못하나요?

하루종일 주물러도 해결이 안되네요.ㅠㅠ

참고로 프로토콜이 동일할 경우에는 문제가 없습니다.

|

답변 6개 / 댓글 7개

채택된 답변
+20 포인트
Copy
function cUrlGetData($url, $post_fields = null, $headers = null) {
    $ch = curl_init();
    $timeout = 5;
    curl_setopt($ch, CURLOPT_URL, $url);
    if ($post_fields && !empty($post_fields)) {
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields);
    }
    if ($headers && !empty($headers)) {
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    }
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    $data = curl_exec($ch);
    if (curl_errno($ch)) {
        echo 'Error:' . curl_error($ch);
    }
    curl_close($ch);
    return $data;
}

 

$post_fields = null;
$headers = [
    'accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
    'sec-ch-ua: "Google Chrome";v="87", " Not;A Brand";v="99", "Chromium";v="87"',
    'sec-ch-ua-mobile: ?0',
    'user-agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36',
];
$res = cUrlGetData("http://www.bbb.com",$post_fields,$headers);

$res = json_decode($res, true);

print_r($res);

답변에 대한 댓글 6개

bbb 사이트 제어권이 없다면
서버사이드에서 우회하셔야합니다.
MIME-type까지 맞춰 주면 딱 좋겠네요.
넵 체크를 못했네요.
accept: text/html -------> accept: application/json 변경

그런데 컴대장님은 워낙 출중하신 실력을 가지고 계신분인데 이 내용이야 아실테고 혹시라도 ajax jsonp로 우회 하신분이 있으신가 질문하신거 같네요.
답변해 주신 모든 분들께 감사드립니다.
벌이뉨 bbb 사이트 제어권이 있으면 어떻게 ajax jsonp로 우회할 수 있는지 좀 알려주세요.
넘기는 변수들이 4개인데 input 항목으로 구성되어있고 post나 get방식도 아니라 난감하네요.
jsonp 값을 가져와 현재 화면 하단에 뿌려주는것이라 curl로 구현하기가 힘드네요.
유용한 예제 감사합니다.
curl 도 crud 다 되는걸로 아는데요. 제어권 있으시면 ssl 적용하고 크로스도메인 적용하시라고 한말입니다. 다른분들 답변이랑 같은 말이죠 ㅠㅠ
아~ 그런 의미였군요.
결국 SSL 적용하는 방법 밖에는 없군요.
감사합니다.

https://sir.kr/pg_tip/17089

도움이 되실지 모르겠으나 시간이 좀 남아 정리해봤습니다.

2022-06-16 (목) 00:31:52

jsonp 로 안되시나요 ?

답변에 대한 댓글 1개

네...
https://aaa.com에서 http://bbb.com을 호출하면 데이터는 보이는데 가져오지를 못합니다.

개발자 모드에서 해당 URL을 클릭해 보면 결과값은 정상인데 "응답 데이터를 로드하지 못했습니다."라고 메시지가 보이네요.

크로스도메인의 경우 서버에서 설정을 하여 허용된 도메인만 가능합니다
서버사이드 언어인 php나 jsp등은 curl을 활용하여 값을 가져올 수 있으니 백엔드쪽이 가능하다면  curl을 활용하세요

2022-06-15 (수) 17:04:11

https 에서 http 로드는 거의 불가능합니다.

어떤 종류의 api인지는 모르겠지만

https에서는 http 컨텐츠를 가져올수없습니다.

반대는 가능.

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