2014-09-13 5 views
0

libcurl을 사용하여 c 웹 사이트 (https가 아닌 http 웹 사이트)에 로그인하려고합니다. 문제는 로그인 후 도메인의 페이지에 접속하려고하면 내 세션이 만료되었다고 주장하는 페이지로 리디렉션되고 relog해야합니다.libcurl을 사용하여 세션이 만료되었습니다.

그런 다음 웹 사이트에서 사용하는 세션 쿠키에 문제가 있다고 가정했습니다. 이것은 쿠키를 처리하는 데 사용하는 코드입니다. 로그인 페이지로 갈 때 가장 먼저 요청할 때이 설정을 사용합니다.

curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "cookie.txt"); 
curl_easy_setopt(curl, CURLOPT_COOKIEJAR, "cookie.txt"); 
curl_easy_setopt(curl, CURLOPT_COOKIESESSION, 1); 

그런 다음 CURLOPT_VERBOSE를 사용하여 세션에 대한 정보를 얻었습니다. 참으로 쿠키를 받고 다음 요청에서 다시 보냅니다.

Set-Cookie: PHPSESSID=2d952576829405ce0d25689804b525ec; path=/ 

이 쿠키는 다음과 같이 다음과 같은 요청에 사용됩니다

Cookie: PHPSESSID=2d952576829405ce0d25689804b525ec 

을 내가 cookie.txt에 갈 때 마지막으로 나는 또한이 쿠키를 참조하십시오

domain FALSE / FALSE 0 PHPSESSID 2d952576829405ce0d25689804b525ec 

그래서 결론 내 질문은 : 어떻게 더 이상 만료 된 세션의 문제를 해결할 수 있습니까? 인터넷상의 대부분의 출처는 쿠키를 작동시키는 방법을 설명하고 있지만이 경우 쿠키에 문제가 나타나지 않습니다.

편집 : Vasiliy Faronov에서 제공하는 일반적인 방법을 사용하여 일반적으로 두 개의 추가 쿠키가 자바 스크립트 응답에서 생성된다는 것을 알았습니다. 분명히 libcurl은 javascript를 해석하지 않으므로 쿠키를 생성하지 않습니다. 쿠키의 가치를 에뮬레이트 한 후 모든 것이 작동하므로이 문제를 해결할 것을 고려할 것입니다.

답변

1

웹 브라우저에서 작동하지만 프로그래밍 방식 요청에는 작동하지 않는 웹 리소스가있는 경우 일반적인 동작 과정은 간단합니다.

  1. 보내고있는 요청과 응답을 자세히 조사해보십시오. 귀하의 웹 브라우저의 개발자 도구 및 CURLOPT_VERBOSE을 사용할 수 있습니다. 많은 경우 패킷 스니퍼가 작동합니다.
  2. 웹 브라우저와 성공적으로 상호 작용하고 요청/응답 흐름을 캡처하십시오.
  3. 프로그래밍 방식으로 동일한 요청/응답 흐름을 재현하십시오. 실용적인 방법으로 모든 메시지 세부 정보를 재생하는 것과 똑같은 방식으로 요청을하는 경우 일반적으로 동일한 결과를 얻어야합니다.
  4. 단계별로 프로그램을 변경하십시오. 불필요한 헤더와 쿠키를 하나씩 제거하고 User-Agent 등으로 바꿉니다. 어떤 시점에서 상호 작용이 중단되고 예를 들어 그 특별한 헤더가 중요하다는 것. 또는 전혀 중단되지 않을 수도 있습니다.
관련 문제