我有一个小的laravel应用程序,我添加了http://phphttpclient.com/-httpful REST客户端使用外部api-http://en.help.mailstore.com/spe/Management_API_-_Using_the_API
我能够使用mailstoreapi进行"对话"。这里有一个例子:
public function GetEnvironmentInfo()
{
$uri = 'https://bla.com:8474/api/invoke/GetEnvironmentInfo';
$response = Httpful::post($uri)
->authenticateWith('admin', 'password')
->send();
$errors = $response->body->error;
$version = $response->body->result->version;
$license = $response->body->result->licenseeName;
dd($version . $license . $errors);
}
这个功能起作用。但是当我试图向api发送额外的数据时,我遇到了一个问题。
在api的手册中,你可以找到以下句子。
当函数需要额外的数据时,此数据必须发送url编码。应设置HTTP标头内容类型:application/x-www-form-urlencoded。
例如,我想在api的帮助下设置用户密码。
设置用户密码
设置MailStore用户的密码。
自变量名称类型描述instanceID string调用此命令的MailStore实例的唯一ID。userName string MailStore用户的用户名。password string MailStore用户的密码。
我试过这个代码。
public function SetUserPassword()
{
$uri = 'bla.com:8474/api/invoke/SetUserPassword';
$response = Httpful::post($uri)
->authenticateWith('admin', 'password')
->addHeaders(array(
'instanceID' => 'bla',
'userName' => 'myuser',
'password' => 'mypassword'
))
->sendsType(HttpfulMime::FORM)
->send();
dd($response->body->error);
}
这是我得到的错误响应:
object(stdClass)[142]
public 'message' => string 'Argument instanceID is missing.' (length=31)
public 'details' => string 'System.Exception: Argument instanceID is missing.
bei #Y3c.#VGc.#X3c(#ncb #tPc, #8xe #I9f, String #GPf, NameValueCollection #P5b, Int32 #joc)
bei #Y3c.#VGc.#Slc(#LLc #Rmc, #8xe #I9f)
' (length=192)
我在头中添加了instanceID和其他参数,但api找不到参数或值。
我认为问题出在url编码上?你能帮我吗?
谢谢!
在addHeaders方法中,您需要传递数组['Content-Type'=>'application/x-www-form-urlencoded']。其余的参数应该作为post请求的主体传递。