2009-08-25 3 views
6

나는 얼마 동안 Poco Net 라이브러리를 사용 해왔다. 꽤 좋다. 매우 편리하고 이해하기 쉽습니다.POCO Net C++ 라이브러리의 프록시 인증

프록시 주소를 설정할 수 있었으며 407 프록시 인증이 필요합니다. 그걸 알았어

HTTPRequest req(HTTPRequest::HTTP_GET, path, HTTPMessage::HTTP_1_1); 
req.setCredentials(scheme, authInfo); 

authInfo에서 "basic", "plaintext"및 scheme : "user : password"같은 값을 사용했습니다. 그것은 작동하지 않는 것 같습니다. Google은 도움이되지 않습니다.

이전에 Poco Net을 사용하여이 작업을 수행 한 사람이 있습니까? 아니면 사용법이 명백합니까? 그리고 일반적으로 프록시 인증에 대한 저의 무지 때문에 제대로 작동하지 않습니다. 제발 조언.

편집 : 좀 더 놀아 본 후에는 원격 서버가 로그인 할 때 원격 서버에서 로그인 할 때 setCredentials 기능이 사용된다고 생각합니다. Poco Net 라이브러리를 사용하여 프록시 인증을 수행하는 방법을 찾지 못했습니다. 프록시 서버와 포트를 설정할 수있었습니다. 이것은 인증이없는 프록시 서버가있는 경우 내가 가지고있는 것입니다.

HTTPClientSession session(uri.getHost(), uri.getPort()); 
HTTPRequest req(HTTPRequest::HTTP_GET, path, HTTPMessage::HTTP_1_1); 
session.setProxy("host", port); 
session.sendRequest(req); 

도움이 필요합니다.

편집 :은 @StackedCrooked에 의해 제안 된 솔루션을 바탕으로, 내가 요청을하기 전에 요청 헤더에 프록시 인증 세부 정보를 설정했는데, 인터넷에서 발견 다른 접근 방식에서, 나는 단지를 한 후 프록시 인증 세부 사항을 설정 초기 요청과 407 오류가 발생했다가 다시 요청합니다. 두 방법 모두 동일한 407 오류를 제공했습니다. 현재 코드는 다음과 같습니다.

HTTPClientSession session(uri.getHost(), uri.getPort()); 
HTTPRequest req(HTTPRequest::HTTP_GET, path, HTTPMessage::HTTP_1_1); 
session.setProxy("10.7.128.1", 8080); 
req.set("Proxy-Authentication", "Basic bGVlbGE6bGVlbGExMjM="); 
session.sendRequest(req); 
+0

codepad.org에 테스트 케이스를 설치해도 될까요? 나는 내 프록시에 대해 그것을 시도하고 싶다. – joshperry

+1

@StackedCrooked가 제안한 올바른 헤더는 "Proxy-Authentication"보다는 "Proxy-Authorization"이라고 생각합니다. 실제 코드가 올바른 코드입니까? –

답변

2

아마도 HTTP 헤더에 프록시 인증 필드를 추가해야 할 것입니다. Poco의 HTTPRequest 클래스에는 이에 대한 전용 메소드가 없습니다. 이 공개적으로 NameValueCollection은 클래스를 상속하기 때문에, 당신은 다음과 같이 설정할 수 있습니다 :

req.set("Proxy-Authorization" , "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ=="); 

QWxhZGRpbjpvcGVuIHNlc2FtZQ==는 "알라딘 : 오픈 참깨"의 버전을 base64 인코딩이다.

HTTP 프로토콜에 대해 조금 배우면 이러한 문제가 훨씬 쉽게됩니다. 나는 이제 대부분 내 자신에게 설교 중입니다.

+0

나는 여러 가지 방법으로 이것을 시도해 왔으며, 항상 같은 407 오류를 준다. 질문의 편집을 참조하십시오. – Sahas

+0

이 주제에 대한 지식이 제한적이기 때문에 나는 네 이상을 도울 수 없다.지금까지 해결책을 찾았 으면 좋겠어요. (곧 찾을 수있을 것입니다.) – StackedCrooked

+0

기본 인증 외에도 다른 인증 (다이제스트, NTLM, 여권 등)이 있습니다. WinHTP가이 작업을 수행합니다 (http://msdn.microsoft.com/en-us/library/windows/desktop/aa383144(v=vs.85)) .aspx). poco C++ (또는 다른 라이브러리)가 동일한 작업을 수행 할 수 있는지 궁금 할 것입니다. – quixver

1

나는이 코드를 사용하지 않았지만 HTTPBasicCredentials 클래스를 보았습니까? 그것은 authenticate 메소드를 통해 req.setCredentials에 대한 호출을 마무리합니다. 다음 줄을 따라 무언가로 끝날 것입니다.

HTTPRequest req(HTTPRequest::HTTP_GET, path, HTTPMessage::HTTP_1_1); 
HTTPBasicCredentials cred("user", "password"); 
cred.authenticate(req); 
+0

방금 ​​시도했습니다. 작동하지 않습니다. 나는 원격 서버가 기본 인증 정보를 기대할 때 HTTPBasicCredentials가 필요하다고 생각한다. 이제는 처음에 시도한 setCredentials 함수조차도이 목적을위한 것이 아니라고 생각합니다. – Sahas

+1

이것은 작동합니다 ... 다른 대답은 아닙니다 (수동으로 poco 인코더를 사용하여 Base64Encoding). – Homer6