带有urlencode的Httpful帖子



我有一个小的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请求的主体传递。

相关内容

  • 没有找到相关文章