문제

나는 한동안 Poco Net 라이브러리를 가지고 놀았는데 꽤 좋습니다.매우 편리하고 이해하기 쉽습니다.

프록시 주소를 설정할 수 있게 되었는데, 407 프록시 인증이 필요하다는 문구가 제대로 뜨네요.나는 그렇게 생각했다

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

나는 구성표에서 "basic", "plaintext", authInfo에서 "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);
도움이 되었습니까?

해결책

HTTP 헤더에 프록시 인증 필드를 추가해야 할 수도 있습니다.Poco의 HTTPRequest 클래스에는 이에 대한 전용 메서드가 없습니다.그러나 NameValueCollection 클래스를 공개적으로 상속하므로 다음과 같이 설정할 수 있습니다.

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

어디 QWxhZGRpbjpvcGVuIHNlc2FtZQ== "Aladdin:open sesame"의 base64 인코딩 버전입니다.

HTTP 프로토콜에 대해 조금 배우면 이러한 많은 문제가 더 쉬워집니다.나는 지금 대부분 나 자신에게 설교하고 있습니다 :)

다른 팁

제가 직접 사용해본 적은 없지만, 혹시 보셨나요? HTTPBasic 자격 증명 수업?인증 메소드를 통해 req.setCredentials에 대한 호출을 마무리합니다.당신은 다음과 같은 내용으로 끝날 것입니다.

HTTPRequest req(HTTPRequest::HTTP_GET, path, HTTPMessage::HTTP_1_1);
HTTPBasicCredentials cred("user", "password");
cred.authenticate(req);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top