HTTP logowanie na forum

0

Witam chciałbym się zalogować na forum poprzez bibliotekę SFML ale jakoś nie idzie :|
wklejam kod:

 
#include <iostream>
#include <SFML/Network.hpp>
#include <sstream>
using namespace std;

int main()
{
    sf::Http::Request request("/login.php", sf::Http::Request::Post);

    string login="sss";
    string haslo="zzzz";

    std::ostringstream stream;
    stream << "usrname=" << login << "&passwrd=" << haslo;
    request.setBody(stream.str());

     sf::Http http("http://darkwarez.pl/forum/");
    sf::Http::Response response = http.sendRequest(request);

    // check the status
    if (response.getStatus() == sf::Http::Response::Ok)
    {
        // check the contents of the response
        std::cout << response.getBody() << std::endl;
    }
    else
    {
        std::cout << "request failed" << std::endl;
    }

    return 0;
}

wynik: "request failed"

jeżeli byłby ktoś w stanie pomóc to bardzo dziękuje

0

Włącz wireshark dodaj filtr: http.host=="darkwarez.pl" i popatrz co wysyła przeglądarka, a co wysyła twój kod (i jakie dostajesz odpowiedzi).
Pierwszy problem jaki widzę, to ścieżka w obiekcie http, powinno być raczej sf::Http http("http://darkwarez.pl/");
Drugi to czy jesteś pewien, że to jest prawidłowy sposób logowania (wracamy do wireshark), nie dostajesz jakiegoś authentication challenge?

Poza tym jak się tak raportuje błędy to ma się właśnie takie problemy, że nie wiadomo co się dzieje. Popraw tak (mniej więcej):

#include <iostream>
#include <SFML/Network.hpp>
#include <sstream>
using namespace std;
 
int main()
{
    sf::Http::Request request("/login.php", sf::Http::Request::Post);
 
    string login="sss";
    string haslo="zzzz";
 
    std::ostringstream stream;
    stream << "usrname=" << login << "&passwrd=" << haslo;
    request.setBody(stream.str());
 
     sf::Http http("http://darkwarez.pl/");
    sf::Http::Response response = http.sendRequest(request);
 
    // check the status
    if (response.getStatus() == sf::Http::Response::Ok)
    {
        // check the contents of the response
        std::cout << response.getBody() << std::endl;
    }
    else
    {
        std::cout << "Request failed. Result=" << response.getStatus() << " " << response.getField("Status") << std::endl;
        if (response.getBody().lenght()!=0) {
             std::cout << "Body:\n" << response.getBody() << std::endl;
        }
    }
 
    return 0;
}
0

Ja tam się nie znam i się nie odzywam ale po mojemu należałoby wcześniej zrobić GET na stronę logowania bo tam jest zapisywane ciacho __cfduid, druga możliwa przyczyna nie ustawiony nagłówek Referer (niektóre strony to sprawdzają), trzecia przyczyna to że wysyłając dane logowania nie wysyłasz parametru login=Zaloguj a to też może być konieczne.

1 użytkowników online, w tym zalogowanych: 0, gości: 1