Отправка запросов с помощью Python (перехваченных с помощью Burp)

У меня проблемы с пониманием запросов. Допустим, у меня есть этот запрос:

POST /user/follow HTTP/1.1
Host: www.website.com
User-Agent: some user agent
Accept: application/json, text/plain, */*
Accept-Language: pl,en-US;q=0.7,en;q=0.3
Referer: https://www.website.com/users/12345/profile
Content-Type: application/json;charset=utf-8
X-CSRF-TOKEN: Ab1/2cde3fGH
Content-Length: 27
Cookie: some-cookie=;
DNT: 1
Connection: close

{"targetUser":"12345"}

Как я должен использовать эту информацию для отправки действительного запроса с использованием python? То, что я нашел, не очень полезно. Мне нужен кто-то, чтобы показать мне пример с данными, которые я дал вам.


person David    schedule 08.04.2017    source источник


Ответы (2)


Я бы сделал что-то вроде этого.

import requests
headers = {
    "User-Agent": "some user agent",
    "Content-Length": 27
    # you get the point
     }
data = {
    "targetUser" : "12345"
    }
url = "www.website.com/user/follow"
r = requests.post(url, headers=headers,data=data)

Да, вы будете использовать файлы cookie для входа в систему. Файлы cookie являются частью заголовков.

person apoorlydrawnape    schedule 08.04.2017
comment
Итак, Content-Length не может быть строкой? (27) - person David; 08.04.2017
comment
Я бы оставил его как целое число, но строка в порядке. - person apoorlydrawnape; 08.04.2017
comment
Ошибка Python только что сказала мне, что это должна быть строка. В любом случае, похоже, что на веб-сайте есть файлы cookie, в которых хранятся некоторые вещи, такие как токены времени / даты и сеанса, скорее всего, для предотвращения ботов ... это будет сложно. - person David; 08.04.2017
comment
Вы, ребята, повеселитесь, пока я пытаюсь выяснить, как пройти проверку токена XSRF. Кстати, я не знаю, какой ответ принять. Не могу оба. - person David; 08.04.2017
comment
Ой, извините за мою ошибку. Недавно у меня была проблема с токенами CSRF. Я не продолжил то, над чем работал, но думаю, что это можно было бы обойти сеансом. Я не уверен, как это работает с запросами, но, по крайней мере, это возможно. - person apoorlydrawnape; 08.04.2017
comment
Я могу получить токен через консоль, поместить его в репитер Burp и отправить запрос. Это сработало. Теперь я должен заставить это работать с моим сценарием. - person David; 08.04.2017
comment
Мне снова нужна твоя помощь. Когда я отправляю запрос с помощью burp, он работает нормально, но когда я отправляю его с помощью python, я получаю ответ: {isValid:false,data:null,error:} - person David; 09.04.2017
comment
Вы просто создадите новый вопрос для этого и свяжете меня с ним? Я могу попытаться помочь, но определенно есть люди, которые знают больше, чем я. Включите больше деталей, если вы это сделаете. - person apoorlydrawnape; 09.04.2017
comment
stackoverflow.com/questions/43311053/ - person David; 09.04.2017

Я не буду писать стихи, я просто приведу пример кода:

import requests

headers = {
    "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
    "Accept-Language": "en-US,en;q=0.5",
    "Referer": "SOMETHING",
    "Cookie": "SOMETHING",
    "Connection": "close",
    "Content-Type": "application/x-www-form-urlencoded"
}
data = "SOME DATA"
url = "https://example.com/something"

request = requests.post(url, headers=headers, data=data)

В заголовках вы устанавливаете нужный заголовок и т. Д. Я думаю, вы поняли;)

person Symonen    schedule 08.04.2017
comment
Спасибо, но куда в моем случае должна идти последняя строка - {targetUser:12345}? Кажется, что он отличается от остальных. - person David; 08.04.2017
comment
В вашем случае вы должны изменить НЕКОТОРЫЕ ДАННЫЕ на {targetUser:12345} . В переменную данных вы должны вставить свои данные :) - person Symonen; 10.04.2017