Перенаправление 302 после входа в Java при статусе 200 в других языках - PullRequest
0 голосов
/ 08 января 2019

Я нашел код на Python и C #, который я должен перевести на Java. Но когда я пытаюсь войти, он показывает код запроса 302. В POST в браузере это также 302. Можете ли вы сказать, пожалуйста, что не так?

Мой код:

public class Auth {
String login, passwd;
public Auth(String login, String passwd) throws IOException {
    HttpClient client = HttpClients.createDefault();
    HttpPost post = new HttpPost("https://auth.mail.ru/cgi-bin/auth");
    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
    nameValuePairs.add(new BasicNameValuePair(login, passwd));
    post.setEntity(new UrlEncodedFormEntity(nameValuePairs));
    HttpResponse response = client.execute(post);
    System.out.println(response);
  }
}

public class Test {
public static void main(String[] args) throws IOException {
    new Auth("login@mail.ru", "passwd");
  }
}

Код для перевода (Python):

def __recreate_token(self):
    loginResponse = self.session.post("https://auth.mail.ru/cgi-bin/auth",
                                      data={
                                          "page": "http://cloud.mail.ru/",
                                          "Login": self.login,
                                          "Password": self.password
                                      },verify=False
                                      )
if loginResponse.status_code == requests.codes.ok and loginResponse.history:
...

И С #:

...
string reqString = string.Format("Login={0}&Domain={1}&Password={2}", this.LoginName, ConstSettings.Domain, HttpUtility.UrlEncode(this.Password));
byte[] requestData = Encoding.UTF8.GetBytes(reqString);
var request = (HttpWebRequest)WebRequest.Create(string.Format("{0}/cgi-bin/auth", ConstSettings.AuthDomen));
        request.Proxy = this.Proxy;
        request.CookieContainer = this.Cookies;
        request.Method = "POST";
        request.ContentType = ConstSettings.DefaultRequestType;
        request.Accept = ConstSettings.DefaultAcceptType;
        request.UserAgent = ConstSettings.UserAgent;
        var task = Task.Factory.FromAsync(request.BeginGetRequestStream, asyncResult => request.EndGetRequestStream(asyncResult), null);
        return await await task.ContinueWith(async (t) =>
         {
             using (var s = t.Result)
             {
                 s.Write(requestData, 0, requestData.Length);
                 using (var response = (HttpWebResponse)request.GetResponse())
                 {
                     if (response.StatusCode != HttpStatusCode.OK)
                     {
                         throw new Exception();}
...

1 Ответ

0 голосов
/ 08 января 2019

Я думаю, вы должны написать

nameValuePairs.add(new BasicNameValuePair("page", "http://cloud.mail.ru/"));
nameValuePairs.add(new BasicNameValuePair("Login", login));
nameValuePairs.add(new BasicNameValuePair("Password", passwd));

вместо

nameValuePairs.add(new BasicNameValuePair(login, passwd));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...