Вызовы API REST API Sugar CRM через POST всегда возвращают документацию

#rest #sugarcrm

#rest #сахарный крем

Вопрос:

Я отправляю следующий запрос API входа (с использованием Fiddler) на сервер Sugar 6.5.4, и все, что я когда-либо получаю обратно с запросом POST, — это документация SugarWebServiceImplv4_1.php . Я ожидаю получить ответ JSON с идентификатором сеанса (или ошибкой?).

Что я делаю не так?

Я попробовал URL-адреса служб v2, v2.1, v3, v3.1, v4 и v4.1; все они выдают соответствующую документацию в качестве ответа.

Запрос

 POST https://sugarserver/service/v4_1/rest.php HTTP/1.1
Accept: application/json
Host: sugarserver
Content-Length: 180
Expect: 100-continue
Connection: Keep-Alive

method=loginamp;input_type=JSONamp;response_type=JSONamp;rest_data={"user_auth":{"user_name":"username","password":"md5passwd"},"application_name":"test"}
 

Ответ

 HTTP/1.1 200 OK
Date: Fri, 20 Jun 2014 17:39:16 GMT
Server: Apache/2.2.17 (Win32) mod_ssl/2.2.17 OpenSSL/0.9.8o PHP/5.3.4 mod_perl/2.0.4 Perl/v5.10.1
X-Powered-By: PHP/5.3.5
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html
Content-Length: 39895

<pre>/**
 * SugarWebServiceImplv4_1.php
 *
 * This class is an implementation class for all the web services.  Version 4_1 adds limit/off support to the
 * get_relationships function.  We also added the sync_get_modified_relationships function call from version
 * one to facilitate querying for related meetings/calls contacts/users records.
 *
 */
Class [ <user> class SugarWebServiceImplv4_1 extends SugarWebServiceImplv4 ] {

...
 

Если, с другой стороны, я отправляю запрос GET, я получаю действительный ответ. Почему POST не работает?

С POST я не могу переместить rest_data параметр — или необработанный объект JSON без имени rest_data параметра — в тело запроса, оба вызывают ответ JSON «Недопустимый вход».

Запрос

 GET https://sugarserver/service/v4_1/rest.php?method=loginamp;input_type=JSONamp;response_type=JSONamp;rest_data={"user_auth":{"user_name":"username","password":"md5passwd"},"application_name":"test"} HTTP/1.1
Accept: application/json
Host: sugarserver
Connection: Keep-Alive
 

Ответ

 Date: Fri, 20 Jun 2014 20:56:05 GMT
Server: Apache/2.2.17 (Win32) mod_ssl/2.2.17 OpenSSL/0.9.8o PHP/5.3.4 mod_perl/2.0.4 Perl/v5.10.1
X-Powered-By: PHP/5.3.5
Set-Cookie: PHPSESSID=redacted; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Length: 967
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html

{"id":"redacted","module_name":"Users","name_value_list"...}
 

Ответ №1:

Тьфу — это был тип содержимого в запросе. Он должен быть установлен для формы в кодировке URL, тогда работает запрос POST.

Content-Type: application/x-www-form-urlencoded; charset=UTF-8

Ответ №2:

Попробуйте зайти на свой сервер через http вместо https и посмотреть, что это даст … в противном случае, зайдите в конечную точку с помощью своего браузера, например https://sugarserver/service/v4_1/rest.php?method=loginamp;input_type=JSONamp;response_type=JSON , просто чтобы посмотреть, вернете ли вы JSON или что … когда я пытаюсь это сделать на своем рабочем сервере, я получаю сообщение об ошибке в кодировке JSON:

 {"name":"Invalid Login","number":10,"description":"Login attempt failed please check the username and password"} 
 

Комментарии:

1. Не могу использовать HTTP на нашем сервере, должен использовать HTTPS. Когда я тестирую с вашим URL (без rest_data параметра), я получаю ответ JSON. Я обновил свой пост, чтобы изменить свой вопрос — спасибо.