Extra Form
PHP PHP 7.4
CMS Rhymix 2.1

안녕하세요... 

잘 작동하던 코드가 라이믹스를 2.1로 업그레이드한 이후 갑자기 이상동작을 해서 질문드립니다.

어떻게 해결해야할지 감이 잘 안와서 힌트라도 받아가고 싶습니다...

아래의 코드입니다. $url이나 $email, $key등은 여전히 정상적으로 들어가고 있다는걸 확인했구요...

원래는 응답이 오면 json_decode()로 풀어서 처리할 수 있었습니다.

근데 지금은 응답이 비어있네요... 

getRemoteResource()가 아니라 다른 식이면 좀더 정보가 있을텐데

getRemoteResource()은 안에서 전부 다 처리하는 식이다보니... 정보가 너무 없습니다...

제 서버면 디버거로 안쪽까지 들어가볼텐데 제 서버가 아닌터라... 

 

$url은 'https://api.stibee.com/v1/lists/318579/groups/320398/subscribers/assign'입니다...

https가 뭔가 문제인걸까요?

 

검색해보니까 라이믹스 2.1에선 guzzle을 내부적으로 쓰도록 수정되었다고 해서

guzzle의 버젼을 확인해보니까 7.8.1이 /common/vender에 설치되어 있습니다.

근데 소스를 뒤져보니 다른 모듈에서도 직접 guzzle을 사용하는 경우들이 있는 것 같은데

이럴때 문제가 될 수 있지 않을까요? 혹시 autoload가 중복되어 실행되나 싶어서

테스트해봤는데 그것은 아닌거 같긴 합니다만....
 

$return = FileHandler::getRemoteResource(
$url,
json_encode([$email]),
10,
'POST',
'content-type: application/json',
array(
'AccessToken' => $config->stibee_api_key,
'accept' => 'application/json'
),
array(),
array(),
array('ssl_verify_peer' => false)
);

 

  • Lv37

    'content-type: application/json',
    이게 된다니 이상한데요?

    XE나 라이믹스나 그 앞에 Content-Type: 을 한 번 더 붙여주는 것은 마찬가지이니,
    'application/json', 이렇게 실제 타입 명칭만 넣어야 할 겁니다.

    좀더 확실하게 디버깅하시려면 Rhymix\Framework\HTTP::request()를 사용하시면
    Guzzle이 반환하는 값을 그대로 돌려주므로
    HTTP 상태 코드, 헤더, 응답 내용 등의 raw 값을 확인할 수 있습니다.

    기존의 FileHandler::getRemoteResource()는 반환 타입이 string 달랑 하나여서
    이런 부수적인 정보를 함께 담아서 반환할 수 없고,

    응답 내용도 상태 코드가 200인 경우에만 정상적으로 반환하기 때문에

    디버깅에 영 도움이 되지 않습니다.

  • Lv37 ? Lv10
    아.. 저도 그냥 다른데서 쓰고 있던 소스코드 복사해서 약간만 수정해서 썼던거라서....
    그리고 getRemoteResource() 안쪽에서 나온 결과를 debugPrint로 찍어봤더니

    cURL error 5: Unsupported proxy syntax in 'http://:'

    이런 에러가 뜨는군요...
    전해진 url값은 직전까지도 변형되지 않았고 https로 시작하나 http로 시작하나 똑같은 에러가 떴습니다.
  • ? Lv10 Lv37

    혹시 프록시 서버를 설정하셨나요? 프록시 관련 에러인 것 같은데요.

  • Lv37 ? Lv10
    예.. guzzle 인스턴스 생성 직전에 보니까 proxy가 http://:/ 로 저장되어 있네요..
    근데 왜 이렇게 된건지 모르겠는데요....
  • Lv37 ? Lv10
    보니까 proxy값으로 http://domain:port/path 로 읽어와서 이걸 가지고 변형시켜서
    proxy가 최종적으로 http://: 로 저장됩니다...
    http://domain:port/path를 어디서 읽어온건지는 잘 모르겠는데...
    하여튼 이걸 변형시킨 결과물도 좀 문제가 있는 것 같은데요... http://:면...
  • Lv37 ? Lv10
    아. 이게 어디서 온 값인가 했더니 config.user.inc.php 에서 읽어온 값이군요...
    이거 느낌이 일종의 예제로 준 파일같은데 왜 이게 읽히는걸까요..??
    실제 프록시 설정한 것도 아닌데 이런 값이 읽히면 안될텐데....
  • Lv37 ? Lv10
    일단 $proxy에 강제로 ''를 넣어서 해당 코드를 무시하도록 만들어서 넘어갔습니다....
  • ? Lv10 Lv37
    config.user.inc.php는 원래 없는 파일입니다. 사용자가 생성한 경우에만 불러옵니다.
    XE 시절부터 프록시나 디버깅 설정 등을 넣기 위해 이 파일을 만들어 쓰는 사이트가 많이 있었지요.
    문제의 사이트에서 예전에 만들어 넣어 놓고 잊어버린 모양이네요.