아래 예제도 POST이고 방금 테스트해보니 GET/POST 모두 정상작동됩니다.
참고로 /v2/user/me는 GET POST 모두 지원합니다.
[rest api 예제] php - 카카오 로그인, 카카오 친구목록 조회 및 카카오톡 메시지
GET POST method 문제라면 오류가 발생해야지 타임아웃이 발생한다면 뭔가 개발하신 환경상 다른 문제가 있을 듯해요.
아래 예제도 POST이고 방금 테스트해보니 GET/POST 모두 정상작동됩니다.
참고로 /v2/user/me는 GET POST 모두 지원합니다.
[rest api 예제] php - 카카오 로그인, 카카오 친구목록 조회 및 카카오톡 메시지
GET POST method 문제라면 오류가 발생해야지 타임아웃이 발생한다면 뭔가 개발하신 환경상 다른 문제가 있을 듯해요.
jhjsongoku88 님과 동일한 증상이 어제 오후 부터 클레임 접수되어 고충을 받고 있었습니다.
방화벽 업체를 통해 211.249.200.134 가 block 되고 있는지도 체크 했구요 .
방화벽 업체에서는 request 의 포트 를 통해 reply 포트가 동일해야 하는데 방화벽 정책에 위배되는 포트 변경이 이루어져 ip가 block 처리 된다고 합니다. ip 자체 block이 아닌 방화벽 정책에 위배 되어 block된다고 합니다.
해결 하신 것처럼 post → GET 으로 변경시 해결이 되었습니다.
하지만 근본적인 카카오 정책이 변경된 것인지 서버의 이상을 회피 해서 GET 으로 호출시 문제 해결이 된 것인지는 의문입니다.
일단은 GET으로 변경하여 문제는 해결하였습니다.
안녕하세요. 인프라팀에 내용 전달전 확인을 위해
호스팅환경 및 개발환경 설명 좀 부탁드립니다.
위에 질문 주신 jhjsongoku88 님은 /v2/user/me 호출 시, 서비스측 2분 딜레이 후 0.3초만에 즉시 응답하는 사례인데요.
응답이 전달되었는데… 어떻게 방화벽 block문제인지 이해가 가지 않아서요. 좀더 정보를 수집해봐야 할 것같습니다.
저도 해당부분 다른분들과 같습니다.
curl_setopt($s, CURLOPT_POST, true); => **curl_setopt($s, CURLOPT_POST, false);
으로 변경햇을시 문제 없이 동작합니다.
서버 최대 타임아웃시간이 다른분들과 다르게 지정된 타임아웃이 2분이라는것만 차이인것같습니다.
종합해보면 세분 모두 PHP를 사용하는 상황이고
방화벽을 (설정을) 사용하시는 분도있고 사용하지 않는 분도 있는걸 보면 방화벽 문제가 아닌것같습니다.
제가 제공드린 예시로 테스트는 해보셨을까요?
저는 PHP 개발환경에 종속적인 문제가 있을 것 같은데
아래 예제로 확인 한번 부탁드립니다. POST 예제입니다.
안녕하세요.
위 예제 확인하는중에 질문이 있어 문의드립니다.
예제 $res->properties == “” 부분으로 들어가 아래와 같이 발생하는데,
동의항목 : profile 필수 설정 이 어떤걸 뜻하는지 알 수 있을까요??
디벨로퍼스 설정에 사용자 정보 동의항목을 사용하도록 설정하시라는 이야기인데요. (이용자 정보를 받도록)
본 테스트를 위해서는 크게 상관없습니다. v2/user/me가 호출되고 결과 오는지만 테스트할거니까요.
상세한 설정에 대해서는 가비아에서 피드백은 없었으나
안녕하세요 가비아 퍼스트몰입니다.
telnet 통신시 문제없이 접속이 되는것으로 확인됩니다.
[root@healthyweb-01 conf]# telnet 211.249.200.134 443
Trying 211.249.200.134…
Connected to 211.249.200.134.
Escape character is ‘^]’.
[root@healthyweb-01 conf]# telnet 203.133.166.33 443
Trying 203.133.166.33…
Connected to 203.133.166.33.
Escape character is ‘^]’.
IP 텔넷 확인시엔 문제가 없는것으로 파악되었습니다.
네, 그런면에서
@ciga4 님이 말씀하신 아래 내용은 본 이슈와 무관해보입니다.
방화벽 업체에서는 request 의 포트 를 통해 reply 포트가 동일해야 하는데 방화벽 정책에 위배되는 포트 변경이 이루어져 ip가 block 처리 된다고 합니다. ip 자체 block이 아닌 방화벽 정책에 위배 되어 block된다고 합니다.
추가정보 공유드립니다
현상
저희 사이트의 카카오 로그인 API 구현부는 대략 3년여간 변경된 부분이 없습니다.
어제인 6/7 오후 카카오 로그인 장애에 대한 CS가 들어와 이슈에 대해 인지했으며,
해당 기간 DB 커넥션이 평상시에 비해 2배정도 증가하는 현상도 있었습니다.
사실 지금도 이게 무슨관계가 있는지 이해가 안되긴 하지만…
카카오 로그인 이슈가 해결(GET으로 변경)됬던 19:20에 DB 커넥션 이슈도 해소되었습니다.
이런 연관관계들로 미루어보아 DB 커넥션 이슈가 있었던 6/7 11:39 쯔음 카카오측의 API 서버에 대한 환경변경이 있었을거라 추측중입니다.
Local vs Dev 비교 테스트
댓글로 주신 예제는 디벨로퍼 설정도 따로해야하고, Local 개발환경에서는 카카오 로그인후 => 자사사이트 콜백이 안되는 점이 있어 약식 코드로 테스트를 진행해보았습니다
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://kapi.kakao.com/v2/user/me');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
echo json_encode([
'curl_getinfo()' => curl_getinfo($ch),
'curl_error()' => curl_errno($ch) ? curl_error($ch) : null,
'response' => $response,
]);
curl_close($ch);
솔루션 #1
/user/me, /user/signup 호출시 메서드를 GET으로 변경
이 경우 정상동작하긴 하지만, API 명세에 명시된 메서드를 위배하게됨
curl_setopt($s, CURLOPT_POST, false);
솔루션 #2 (Recommended)
/user/me, /user/signup 호출시 메서드를 POST로 유지하되, 빈 파라미터 전달
/user/me의 경우 전달하는 파라미터가 없는데 왜 POST로 선언되어있는지 이해가 안되긴 하지만,
어찌됬든 명세를 지킬수있는 방법
curl_setopt($ch, CURLOPT_POSTFIELDS, array());
자세한 피드백 감사합니다.
6/8 11:39 쯔음 카카오측의 API 서버에 대한 환경변경이 있었을거라 추측중 입니다.
오늘 오전 11시 39분 말씀 맞으실까요?
최종 확인해주시면 kapi 개발자에게 확인 해보도록 하겠습니다
저희 사이트 기준으로 2023-06-07 12:34:50 에 카카오 간편 로그인으로 마지막 회원가입자가 있었습니다.
해당 시점일듯합니다.
@MeowKim 오늘이 아닌 이야기하시는게 아니고 어제자 이야기하시는것같습니다.
MeowKim 님이 자세하게 이슈된 내용에 대해 서술하시었고
동일한 증상이므로 더 기재는 하지 않겠습니다.
담당자님께서 말씀하신 방화벽의 유무에 관계 없이 같은 문제가 발생 했다라고 한다면 글쎄요.
어찌되었든 https://kapi.kakao.com/v2/user/me POST → GET 으로 변경 이후 무한 로딩 이슈는 사라졌습니다.
단지 POST 에서 GET 으로 변경이 되어도 큰 이슈가 없는지만 알고 싶을 뿐입니다.
site : littlemom.co.kr
OS: centOS7
PHP : 5.6.40
Apache/2.4.54 (codeit)
curl : curl 7.84.0
고객 크레임 발생 시간 : 2023.6.7 15시경
@alswndn2030 @lifezip @MeowKim @ciga4 @jhjsongoku88
확인 감사합니다. KAPI담당자에게 이슈 제보 드렸고 피드백 오는데로 공유드리겠습니다.
지금까지 데브톡으로 본 게시물외에 다른제보가 없고 모두 PHP환경인것으로 볼때 PHP환경 종속적인 문제로 보입니다.
저도 추가로 외부환경에서 POST 테스트 해보도록 하겠습니다.
제가 테스트한 내용도 공유드립니다.
(1) 로컬 - 정상응답
OS: macbook (iOS)
PHP : 8.0.1
Apache/2.4.56 (Unix)
curl/ 7.74.0
(2) 닷홈 호스팅 : 정상응답
OS: CentOS
PHP : 7.3
Apache/2.2.15 (CentOS)
curl/7.19.7
추가 문의 드립니다.
(1) 문제 발생 서버에서 아래 명령 테스트 부탁드립니다.
curl -v -H 'Expect: 100-continue' POST "https://kapi.kakao.com/v2/user/me"
(2) 아래 예제 코드 테스트 해보신분들 피드백 좀 부탁드립니다.
[rest api 예제] php - 카카오 로그인, 카카오 친구목록 조회 및 카카오톡 메시지
(3) 사용하시는 PHP 프레임웍 여부와 종류 공유 부탁드립니다.
POST 앞에 -X 혹은 --request를 붙여야될듯 합니다
curl -v -H 'Expect: 100-continue' -X POST "https://kapi.kakao.com/v2/user/me"
그리고 저희 DEV에서 테스트해본 결과 공유드립니다
앞선 댓글들에서도 말씀드렸듯이 커맨드라인상에서는 정상동작합니다
첨부한 결과에는 211.249.200.134만 있지만 203.133.166.33 역시 정상동작 확인했습니다
USER@HOSTNAME:~$ curl -v -X POST "https://kapi.kakao.com/v2/user/me"
* Trying 211.249.200.134:443...
* Connected to kapi.kakao.com (211.249.200.134) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* CAfile: /etc/ssl/certs/ca-certificates.crt
* CApath: /etc/ssl/certs
* TLSv1.0 (OUT), TLS header, Certificate Status (22):
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.2 (IN), TLS header, Certificate Status (22):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS header, Finished (20):
* TLSv1.2 (IN), TLS header, Supplemental data (23):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.2 (IN), TLS header, Supplemental data (23):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (IN), TLS header, Supplemental data (23):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.2 (IN), TLS header, Supplemental data (23):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.2 (OUT), TLS header, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.2 (OUT), TLS header, Supplemental data (23):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* ALPN, server accepted to use http/1.1
* Server certificate:
* subject: C=KR; ST=Jeju-do; L=Jeju-si; O=Kakao Corp.; CN=*.kakao.com
* start date: Sep 6 00:00:00 2022 GMT
* expire date: Sep 29 23:59:59 2023 GMT
* subjectAltName: host "kapi.kakao.com" matched cert's "*.kakao.com"
* issuer: C=US; O=DigiCert Inc; OU=www.digicert.com; CN=Thawte TLS RSA CA G1
* SSL certificate verify ok.
* TLSv1.2 (OUT), TLS header, Supplemental data (23):
> POST /v2/user/me HTTP/1.1
> Host: kapi.kakao.com
> User-Agent: curl/7.81.0
> Accept: */*
>
* TLSv1.2 (IN), TLS header, Supplemental data (23):
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* TLSv1.2 (IN), TLS header, Supplemental data (23):
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* old SSL session ID is stale, removing
* TLSv1.2 (IN), TLS header, Supplemental data (23):
* Mark bundle as not supporting multiuse
< HTTP/1.1 401 Unauthorized
< Date: Thu, 08 Jun 2023 05:03:20 GMT
< Server: Apache
< Access-Control-Allow-Origin: *
< Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS
< Access-Control-Allow-Headers: Content-Type,X-Requested-With,Accept,Authorization,Origin,KA,Cache-Control,Pragma
< X-Request-ID: d2cc4ec4-27ac-44b0-9eb7-fe5a7d0c11f7
< WWW-Authenticate: error=invalid_token
< Content-Type: application/json;charset=UTF-8
< Content-Length: 48
<
* Connection #0 to host kapi.kakao.com left intact
{"msg":"target ID is not supplied.","code":-401}
USER@HOSTNAME:~$ curl -v -H 'Expect: 100-continue' -X POST "https://kapi.kakao.com/v2/user/me"
* Trying 211.249.200.134:443...
* Connected to kapi.kakao.com (211.249.200.134) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* CAfile: /etc/ssl/certs/ca-certificates.crt
* CApath: /etc/ssl/certs
* TLSv1.0 (OUT), TLS header, Certificate Status (22):
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.2 (IN), TLS header, Certificate Status (22):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS header, Finished (20):
* TLSv1.2 (IN), TLS header, Supplemental data (23):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.2 (IN), TLS header, Supplemental data (23):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (IN), TLS header, Supplemental data (23):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.2 (IN), TLS header, Supplemental data (23):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.2 (OUT), TLS header, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.2 (OUT), TLS header, Supplemental data (23):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* ALPN, server accepted to use http/1.1
* Server certificate:
* subject: C=KR; ST=Jeju-do; L=Jeju-si; O=Kakao Corp.; CN=*.kakao.com
* start date: Sep 6 00:00:00 2022 GMT
* expire date: Sep 29 23:59:59 2023 GMT
* subjectAltName: host "kapi.kakao.com" matched cert's "*.kakao.com"
* issuer: C=US; O=DigiCert Inc; OU=www.digicert.com; CN=Thawte TLS RSA CA G1
* SSL certificate verify ok.
* TLSv1.2 (OUT), TLS header, Supplemental data (23):
> POST /v2/user/me HTTP/1.1
> Host: kapi.kakao.com
> User-Agent: curl/7.81.0
> Accept: */*
> Expect: 100-continue
>
* TLSv1.2 (IN), TLS header, Supplemental data (23):
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* TLSv1.2 (IN), TLS header, Supplemental data (23):
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* old SSL session ID is stale, removing
* TLSv1.2 (IN), TLS header, Supplemental data (23):
* Mark bundle as not supporting multiuse
< HTTP/1.1 100 Continue
* TLSv1.2 (IN), TLS header, Supplemental data (23):
* Mark bundle as not supporting multiuse
< HTTP/1.1 401 Unauthorized
< Date: Thu, 08 Jun 2023 05:15:47 GMT
< Server: Apache
< Access-Control-Allow-Origin: *
< Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS
< Access-Control-Allow-Headers: Content-Type,X-Requested-With,Accept,Authorization,Origin,KA,Cache-Control,Pragma
< X-Request-ID: 4bfde13e-da87-4f3d-a58b-5e1159cceb97
< WWW-Authenticate: error=invalid_token
< Content-Type: application/json;charset=UTF-8
< Transfer-Encoding: chunked
<
* Connection #0 to host kapi.kakao.com left intact
{"msg":"target ID is not supplied.","code":-401}
Symfony Framework 중 일부 기능(라우팅, 익셉션 처리 등)만 사용중이며, 약식코드로 테스트해봐도 동일한 것을 보면 프레임웍과는 무관할것으로 추측됩니다
@alswndn2030 @MeowKim @ciga4 @jhjsongoku88
KAPI 담당자에게 피드백 받은 내용 공유드립니다.
확인한바로 v2/user/me 로직상 변화는 없고
6/5, 6/7 apache 서버 업데이트가 있었고, (2.4.37 → 2.4.57) 로그상 아래 내용이 있다고 합니다.
로직까지 요청이 못들어오고 아파치단에서 걸러진 것 같네요.
Timeout on 100-Continue returned by /v2/user/me
(1) php 에서 post 로 요청을 할때 Expect : 100-continue 헤더를 보내주고 있을 것 같고,
그 후 request body가 오지 않아서 timeout 로그가 발생한게 아닐까 싶은데, 저희가 테스트한바로는 바로 에러 응답이 떨어져셔 재현이 안되네요.
우선은,
@MeowKim님이 정리해주신 curl_setopt($ch, CURLOPT_POSTFIELDS, array()); 구문 사용으로 해결하셔야할 것같습니다.
참고로 API 명세상 v2/user/me는 GET, POST둘다 가능하고 파라메터를 보내는 케이스가 있습니다. 가이드 참고 부탁드립니다.
(2) 찾아보면 2.4.48에서 2.4.51로 업데이트 후 에러가 발생한다는 apache bug report 도 있는데 작년 이후로 아파치 개발자의 답변은 없네요. 65729 – Request with the HTTP Header 'Expect: 100-continue' take over 20s response time in Apache 2.4.51
(3) 아래 예제를 사용하시면 정상 작동하니 참고해보시면 좋을 것같습니다. 제가 정상작동하는 예제로만 테스트를 해서 캐치가 좀 늦었네요.
[rest api 예제] php - 카카오 로그인, 카카오 친구목록 조회 및 카카오톡 메시지
확인 해주셔서 모두 감사드립니다.