다음 로컬 api 키워드검색시 오류 ==>질문 재등록

아래 질문을 올렸으나 장시간 답변이 없어 다시 등록합니다 …
빠른 답변 바랍니다.
저희 서비스에 막대한 지장이 초래 되고 있습니다.

다음 로컬 API중 키워드로 장소검색 API를 사용해서 로컬검색을 했었습니다.
예전에 작성한코드에서는 이상없이 돌아 가던건데 현재는 아래와 같은 에러가 리턴이 되네요
즉 nginx쪽에서 502에러가 발생한거 같은데요
https://apis.daum.net/local/v1/search/keyword.json API를 이용했습니다.

참고로, 브라우저에서 해당 URL은 오류없가 없습니다.
작업은 서버에서 curl을 이용해서 가져옵니다만, 이것이 이전에는 문제가 되지 않았었거든요…

HTTP/1.1 502 Bad Gateway
Server: nginx
Date: Tue, 17 Oct 2017 15:21:42 GMT
Content-Type: text/html
Content-Length: 537
Connection: keep-alive
ETag: "590006b9-219"

<!DOCTYPE html>
<html>
<head>
<title>Error</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>An error occurred.</h1>
<p>Sorry, the page you are looking for is currently unavailable.<br/>
Please try again later.</p>
<p>If you are the system administrator of this resource then you should check
the <a href="http://nginx.org/r/error_log">error log</a> for details.</p>
<p><em>Faithfully yours, nginx.</em></p>
</body>
</html>

보내 주신 시점의 로그는 확인 중입니다.
지금도 502에러 응답을 받고 있는 건가요?

정확한 원인 파악을 위해서 curl로 요청하신 코드도 첨부 부탁드립니다.

여전히 502 Bad Gateway가 떨어지네요
코드는 아래와 같습니다. key는 보안상 xxx처리 합니다.

참고가 될지 모르겠지만 WebServer가 Aws 의 ELB 아래 위치해 있습니다.
서버에서 직접 날렸기 때문에 ELB가 문제가 될거 같지는 않을거 같은데요 …

$apikey= "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
$query = "신북면 평양갈비";
$url = "https://apis.daum.net/local/v1/search/keyword.json?apikey=$apikey&query=$query&format=json&count=10";

$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $url);

curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt ($ch, CURLOPT_SSLVERSION, 4);

curl_setopt ($ch, CURLOPT_TIMEOUT, 30);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);

$result = curl_exec ($ch);
$err = curl_error($ch);

log를 확인해보니 특이사항은 없는 것으로 보이는데요.

혹시 502에러가 저희 쪽으로 요청 하기 전에 받는 응답인지 확인 가능할까요?

ex) 아래 curl로 200응답 확인하였습니다.

curl -v -X GET https://apis.daum.net/local/v1/search/keyword.json\?apikey\=\&query\=%EC%8B%A0%EB%B6%81%EB%A9%B4%20%ED%8F%89%EC%96%91%EA%B0%88%EB%B9%84\&format\=json\&count\=10

php curl 에서 CURLOPT_HTTPGET 옵션을 줘야 하는군요…
보통의 경우 post일때만 CURLOPT_POST 를 true로 주면 되는데
method를 get 소문자로 날리면 502 에러가 발생을 합니다. 반드시 대문자 GET으로 날려야 에러가 없네요 …
참으로 어이가 없네요 … 대소문자를 가리는경우는 참으로 드문경우인데 말이죠…

혹시 502에러가 저희 쪽으로 요청 하기 전에 받는 응답인지 확인 가능할까요? ===> 당연희 502에러는 요청의 결과값이었죠…

말씀하신 내용이 문제의 정확한 원인은 아닌 것으로 보입니다.

위에 공유해주신 php curl 대비 수정하신 내용을 코드로 공유해주실 수 있을까요?
(query의 인코딩이 원인으로 추측되서 추가 문의드립니다.)

맞는데요??
제가 Shell에서도 curl의 method를 get으로 했을때 502에러 떨어 지는것 확인해습니다.
get으로 했을때 에러가 떨어졌고, GET으로 했을때 정상적으로 response가 왔습니다.

query의 인코딩문제였다면 php 의 curl_setopt 에서 CURLOPT_HTTPGET 를 true로 만 줬는데 성공으로 떨어질 이유가 없지 않습니까??

실제 shell에도 마찬가지구요…

확인된 내용 공유드립니다.

  • method를 get으로 요청하시면 400 에러가 뜨게 됩니다.
  • 502 에러가 난 케이스는 공백이 있는 문자열을 인코딩하지 않고 요청한 경우로 보입니다.

참고) method를 get으로 요청한 경우 log → 400 에러 응답

"get /local/v1/search/keyword.json?apikey=***&query=\xEC\x8B\xA0\xEB\xB6\x81\xEB\xA9\xB4 \xED\x8F\x89\xEC\x96\x91\xEA\xB0\x88\xEB\xB9\x84&format=json&count=10 HTTP/1.1" 0.003 400 166 "-" "-" "-" "-" "-" "-" "-" -

참고) 공백이 있는 문자열을 인코딩하지 않고 요청한 경우 → 502 에러 응답

 "GET /local/v1/search/keyword.json?apikey=***&query=\xEC\x8B\xA0\xEB\xB6\x81\xEB\xA9\xB4 \xED\x8F\x89\xEC\x96\x91\xEA\xB0\x88\xEB\xB9\x84&format=json&count=10 HTTP/1.1" 0.004 502 537

가이드)
method를 GET으로 하시고 문자열을 인코딩해서 요청하시면 문제 없을 것으로 보입니다.

외람되지만 지나가다 궁금한게 생겨서 질문드립니다.
HTTP spec상 method들은 case-sensitive 인데 "대소문자를 가리는 경우는 참으로 드물다"는게 어떤 뜻에서 말씀하신건지 궁금합니다.
혹시 다른 참고 문헌이나 다른 API등에서 경험하시고 체득하신것인지…

다른곳에서는 경험못했고, 다음로컬API에서만 경험했습니다.