테스트 사이트 - 개발 중인 베타 버전입니다

프로토콜이 다른경우 제이쿼리 데이터 로드 채택완료

컴대장 3년 전 조회 1,412

안녕하세요.

 

https://www.aaa.com

 

도메인에서

 

http://www.bbb.com

 

도메인의 api를 호출하여

 

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

 

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

 

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

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

답변 6개

채택된 답변
+20 포인트
3년 전

</p>

<p>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;

}</p>

<p> </p>

<p>$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("<a href="<a href="http://www.bbb.com/" target="_blank" rel="noopener noreferrer">http://www.bbb.com/</a>" rel="nofollow noreferrer noopener" target="_blank"><a href="http://www.bbb.com" target="_blank" rel="noopener noreferrer">http://www.bbb.com</a></a>",$post_fields,$headers);</p>

<p>$res = json_decode($res, true);</p>

<p>print_r($res);</p>

<p>

로그인 후 평가할 수 있습니다

답변에 대한 댓글 6개

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

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

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

3년 전

https://sir.kr/pg_tip/17089

 

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

 

로그인 후 평가할 수 있습니다

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

jsonp 로 안되시나요 ?

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

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

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

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

3년 전

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

로그인 후 평가할 수 있습니다

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

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

로그인 후 평가할 수 있습니다

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

포이치
3년 전

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

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

반대는 가능.

로그인 후 평가할 수 있습니다

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

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

로그인