Добрый день.
Мне нужно отправить “PATCH” web запрос, пишу на Robot Framework с использованием библиотеки HttpLibrary.HTTP. В ответ получаю 404 ошибку, хотя данные вроде правильные.
В документации написано использовать кейворд Http Request (verb, url)
При уже созданном HTTP Context-е задаю нужный мне для авторизации header (Set Request Header), задаю тело запроса (Set Request Body), затем отправляю сам запрос:
Http Request | PATCH | ${myURL}
Получаю в ответ ошибку 404.
Когда создаю такой же запрос в Fiddler (те же Header, body и URL) и отправляю, то всё срабатывает без ошибок.
Другие аналогичные запросы, которые я отправляю к другим функциям своего REST Web-сервиса кейвордами POST и DELETE срабатывают без ошибок.
Пробовал также брать PATCH в кавычки при вызове,
Http Request | “PATCH” | ${myURL}
тогда получаю error 400 bad request
(сейчас ещё подумалось, надо будет посмотреть что возвращается в теле и в заголовках при 404 ошибке)
Если у кого-то есть советы как с этим бороться, рад буду выслушать.
Лог patch-запроса от fiddler
А пока гадаю на кофейной гуще: 404 - not found, сервер что-то не нашёл, в каком параметре вы можете что-либо искать, вероятнее всего неверное uri.
Я ещё на всякий случай попрбовал задавать PATCH и url в не-юникод формате, не сработало. Изначально было в юникод, и тоже не работало, с тем же результатом.
fiddler-запрос при этом срабатывает, возвращает код 204 и выполняет нужные действия.
Пробовал отсылать просто PATCH запрос с неправильным адресом на левый web-сервер, в логах того сервера (для ошибочных запросов) видно что PATCH запрос приходит, и url совпадает с тем, что я задавал.
Я пытался fiddler-ом перехватить что отправляется из robot-а, но у меня не получилось. Если кто знает как это делать - подскажите пожалуйста, а то я в поисковике что-то сразу такое не нашёл (пробовал ставить http_proxy Environment Variable чтобы она направляла в fiddler, но безрезультатно)
Есть конечно вариант написать какой-нибудь exe-шник, который бы отправлял нужный запрос, и вызывать его через библиокеку OperatingSystem, но это как-то неспортивно совсем. Все остальные запросы в HttpLibrary работают, а этот - нет
Кроме лишней перекодировки не вижу ничего странного.
При этом вот этот код работает
*** Test Cases ***
test
HttpLibrary.HTTP.Create Http Context host=echo.200please.com scheme=http
HttpLibrary.HTTP.Set Request Body { "workflowInfo":{ "workflowTypeName":"EAA-CorrectiveAction", "assignedTo":[ {"userIdOrName":"AuditAppAutomation"} ] } }
HttpLibrary.HTTP.Http Request PATCH /ver2/WorkflowService.svc/workflows/2e596219-7ce5-4b1f-b524-a86b7dde0508
В крайнем случае Вы можете написать однострочник для отправки запроса при помощи requests. ${r}= Evaluate requests.patch(url, data=None, **kwargs) requests