POST-запрос не работает с Python, но работает с Java - PullRequest
0 голосов
/ 22 апреля 2020

Я собираюсь преобразовать java код в python код. но POST запрос на вход в систему не работает через python код.

// Java code
        String inputData = “{\"lang\" : \"ko\", \"loginName\" : \"kkstar123\", \"password\" : \"123123123\"}”;
        String strUrl = “http://10.110.120.80/management/user/login.json”;
        StringBuffer sb = new StringBuffer();
        HttpURLConnection conn = (HttpURLConnection) new URL(strUrl).openConnection();
        conn.setDoOutput(true);
        conn.setDoInput(true);
        conn.setRequestMethod("POST");
        conn.setRequestProperty("Accept", "application/json");                
        conn.setRequestProperty("Content-Type", "application/json; charset=\"UTF-8\"");
        OutputStream out = conn.getOutputStream(); // if remove OutputStream, it return 404 error
        out.write(inputData.getBytes());
        out.close();     
        System.out.println(conn.getResponseCode());
        InputStreamReader in = new InputStreamReader((InputStream)conn.getContent());
        BufferedReader br = new BufferedReader(in);
        String line;
        while ((line = br.readLine()) != null)
            sb.append(line).append("\n");
        System.out.println(sb.toString());

Выше работает нормально, но .. ниже python Код возврата 404 ошибка

// python code
import requests
from bs4 import BeautifulSoup

header = {
'Accept': 'application/json',
'Content-Type': 'application/json; charset="UTF-8"',
'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Mobile Safari/537.36'
}

payload = {
    "lang": "ko",
    "loginName": "kkstar123",
    "password": "123123123"
}

loginURL = "http://10.110.120.80/management/user/login.json"

with requests.Session() as s:
    login_req = s.post(loginURL, data = payload, headers = header)
    print(login_req)
    print(html)

В чем проблема ? Пожалуйста, помогите мне решить эту проблему. (если я использую селен, он работает отлично! но я хочу получить запрос и ответ быстро! поэтому я пытаюсь использовать запросы API)

Ответы [ 2 ]

0 голосов
/ 22 апреля 2020

Я не должен использовать параметр data для запроса POST. после изменения на json, это работает. я думаю, что я добавляю Content-Type в заголовок с JSON, поэтому я должен использовать json param.

0 голосов
/ 22 апреля 2020

Проверяли ли вы, что запрос, отправленный в браузере, содержит какие-либо куки? Если файлы cookie присутствуют, вам необходимо преобразовать их с помощью SimpleCook ie и добавить их в заголовки запроса. Также создайте объект Session из запросов, так как он будет лучше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...