Почему запросы используют GET после того, как я сообщу это POST?

1

Я даже не уверен, что это происходит, может быть что-то на URLScan.io, но с использованием следующего кода:

api = '####################'
url = 'https://www.urlscan.io/api/v1/scan/'

headers = {
    'Content-Type': 'application/json',
    'API-key': api
}

data = '{"url": "https://www.google.com", "public": "on"}'

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

Я продолжаю получать следующую ошибку:

{
  "message": "Wrong method, use POST",
  "description": "In order to scan a page, you have to POST here.",
  "status": 405
}

Я понятия не имею, что я делаю неправильно. В моем отладчике говорится, что, хотя я называю request.post resp, это возвращаемый объект request.get. Как это возможно? Что я делаю неправильно?

  • 0
    Это не означает, что это не POST, это не потому, что ошибка дает определенную ошибку, эта ошибка является полностью правильной. Например, возможно, что каждый раз, когда запрос недействителен, он возвращает такую ошибку.
  • 0
    Проверьте, если вы получаете перенаправление. Если так, включите эту информацию.
Показать ещё 4 комментария
Теги:
python-requests

3 ответа

3
Лучший ответ

Запустите это в командной строке:

curl -X POST "https://urlscan.io/api/v1/scan/" \
    -H "Content-Type: application/json" \
    -H "API-Key: $apikey" \
    -d "{\"url\": \"$url\", \"public\": \"on\"}"

Если вы получите такое же сообщение назад, то это скорее связано с ними.

  • 0
    Это работает, но только потому, что вы опустили www. Он отлично работает и в запросах. Не могу поверить, что я пропустил это! Я думаю, это считается ответом
  • 0
    Рад, что вы смогли решить это.
Показать ещё 1 комментарий
3

За исключением того, что данные должны быть dict, а не форматированной json-строкой, вы не делаете ничего плохого.

r = requests.post('https://httpbin.org/post', data = {'key':'value'})

Ссылка

0

Эй, вот код, который работает для urlscan.io в Python:

import requests
import json

headers = {'API-Key':'your-api-key','Content-Type': 'application/json'}
params = {'url': 'scan-url' }
response = requests.post('https://urlscan.io/api/v1/scan/',headers=headers, data=json.dumps(params))

Ответ на вызов API даст вам идентификатор сканирования и конечную точку API для сканирования, вы можете использовать его для получения результата после небольшого ожидания. Пока сканирование не завершится, URL ответит кодом состояния HTTP 404.

Надеюсь, поможет!!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню