2009-08-25 16 views
6

Od pewnego czasu gram z biblioteką Poco Net, jest całkiem niezły. Bardzo wygodny i łatwy do zrozumienia.Uwierzytelnianie proxy w bibliotece POCO Net C++

Udało mi się ustawić adres proxy, a to wymaga poprawnie 407 autoryzacji proxy. Pomyślałem, że wypróbowałem wartości takie jak "podstawowy", "zwykły tekst" w schemacie i "użytkownik: hasło" w authInfo. To nie działa. Google nie pomaga.

Czy ktoś wcześniej zrobił to za pomocą Poco Net? Czy użycie jest oczywiste i nie jestem w stanie go uruchomić z powodu mojej ignorancji w odniesieniu do uwierzytelniania proxy w ogóle? Proszę o poradę.

EDIT: Po trochę więcej zabawy, myślę, że funkcja SetCredentials jest używany, gdy zdalny serwer spodziewa informacje uwierzytelniania się zalogować. Nie byłem w stanie znaleźć sposobu na autoryzację proxy za pomocą bibliotek Poco Net. Byłem jednak w stanie ustawić serwer proxy i port. Tak właśnie bym miał, gdyby był tylko serwer proxy bez uwierzytelnienia:

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

Potrzebujesz pomocy.

EDIT: W oparciu o rozwiązania zaproponowanego przez @StackedCrooked starałem ustawienie szczegółów uwierzytelniania proxy do nagłówka żądania przed złożeniem wniosku, a w innym podejściu znaleźć w Internecie, ustawić proxy auth dane tylko po dokonaniu początkowe żądanie i błąd 407, a następnie ponowne wysłanie żądania. Obie metody utrzymywały ten sam błąd 407. Mój bieżący kod wygląda następująco:

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

Czy możesz umieścić test na codepad.org czy coś? Chciałbym spróbować tego z moim proxy. – joshperry

+1

Uważam, że poprawny nagłówek, jak zasugerował @StackedCrooked, to "Proxy-Authorization", a nie "Proxy-Authentication". Czy Twój rzeczywisty kod jest prawidłowy? –

Odpowiedz

2

Prawdopodobnie musisz dodać pole autoryzacji proxy do nagłówków HTTP. Klasa HTTPRequest Poco nie ma dedykowanej do tego metody. Jednakże, ponieważ dziedziczy klasę NameValueCollection publicznie można ustawić go tak:

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

Gdzie QWxhZGRpbjpvcGVuIHNlc2FtZQ== jest zakodowane base64 wersję „Aladdin: otwarty sezamu”.

Wiele z tych problemów staje się łatwiejsze, gdy dowiesz się trochę o protokole HTTP. Teraz głównie do siebie mówię :)

+0

Próbowałem tego na różne sposoby, zawsze podając ten sam błąd 407. Zobacz edycję w pytaniu. – Sahas

+0

Tak, nie mogę ci więcej pomóc, ponieważ moja wiedza na ten temat jest również trochę ograniczona.Mam nadzieję, że znalazłeś już rozwiązanie (lub że wkrótce je znajdziesz!). – StackedCrooked

+0

Oprócz podstawowego uwierzytelnienia istnieją inne uwierzytelnienia - skrót, NTLM, paszport itp. WinHTP robi to za Ciebie (http://msdn.microsoft.com/en-us/library/windows/desktop/aa383144(v=vs.85) .aspx). Byłbym ciekawy, czy poco C++ (lub jakakolwiek inna biblioteka) może zrobić to samo. – quixver

1

Nie używałem tego samemu, ale spojrzał na klasę HTTPBasicCredentials? Łączy połączenie z req.setCredentials za pomocą metody uwierzytelniania. W rezultacie otrzymasz coś w rodzaju:

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

Właśnie próbowałem. Nie działa. Myślę, że HTTPBasicCredentials jest wymagany, gdy serwer zdalny oczekuje podstawowych informacji uwierzytelniających. Teraz myślę, że nawet funkcja setCredentials, którą próbowałem początkowo, również nie jest przeznaczona do tego celu. – Sahas

+1

Działa to ... inna odpowiedź nie (ręcznie Base64Encoding przy użyciu enkodera poco). – Homer6