HTTP 400 Bad Request - CURL PHP

15,885

The bad request is coming from the service that you are trying to reach not from curl. So you need to be sure that you send them the data in correct format.

Share:
15,885
Karina
Author by

Karina

Updated on June 22, 2022

Comments

  • Karina
    Karina almost 2 years

    I am trying to send a PUT request using CURL, but i am getting HTTP 400 Bad Request, I am using CURLOPT_VERBOSE to debug and with that i am getting: "Error: malformed request: Expecting object found: \"email\""} Does anybody know what this means/how i can fix?

    Code:

    // Set the HTTP headers needed for this API call.
    
    $http_headers = array(
    //    "Authorization: Basic xxxxxxxxxxxxxxxxxx",
    "Accept: application/json",
    "Connection: close",                    // Disable Keep-Alive
    "Expect:",                              // Disable "100 Continue" server response
    "Content-Type: application/json"        // Content Type json
    );
    
    // URL Endpoint of the API to be called.
    $ym_api_url = 'https://services.yesmail.com/enterprise/subscribers/718880';
    $newsubscriber = array(
    'email' => '[email protected]',
    'firstName' => 'Karina',
    'lastName' => 'McG',
    'postCode' => 'BT93 EP3',
    'prefersMobile' => '',
    'emailFormat' => 'HTML'
    );
    
    $curl_hdl = curl_init();
    
    $curl_options = array(
    CURLOPT_VERBOSE => TRUE,               // Verbose mode for diagnostics
    CURLOPT_STDERR => $verbose = fopen('php://temp', 'rw+'),            // Verbose output to STDERR
    CURLOPT_HEADER => TRUE,               // Include the header in the output.
    CURLOPT_HTTPHEADER => $http_headers,  // HTTP headers to set
    CURLOPT_HTTPAUTH => CURLAUTH_BASIC,   // Use basic authentication.
    CURLOPT_USERPWD => 'xxxxxxx:xxxxxxxx', //Username/Password
    CURLOPT_PROTOCOLS => CURLPROTO_HTTPS, // Bitmask of protocols libcurl may use in this transfer
    CURLOPT_RETURNTRANSFER => TRUE,       // Return result as return value of curl_exec()
    CURLOPT_URL => $ym_api_url,           // URL to POST data to
    );
    curl_setopt_array($curl_hdl, $curl_options);
    
    //Send array to URL
    curl_setopt($curl_hdl, CURLOPT_CUSTOMREQUEST, "PUT");
    curl_setopt($curl_hdl, CURLOPT_POSTFIELDS, http_build_query($newsubscriber));
    
    //SSL Bypass (!Temporary!)
    curl_setopt($curl_hdl, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($curl_hdl, CURLOPT_SSL_VERIFYPEER, 0);
    
    // Make the API call
    $response = curl_exec($curl_hdl);
    
    // Get the http response code
    $http_response_code = curl_getinfo($curl_hdl, CURLINFO_HTTP_CODE);
    
    // Echo out the Verbose Information
    echo "Verbose information:\n<pre>", !rewind($verbose),  htmlspecialchars(stream_get_contents($verbose)), "</pre>\n";
    curl_close($curl_hdl);
    
    echo PHP_EOL . "INFO: HTTP Response Code was: " . $http_response_code . PHP_EOL;
    
    if ( $response === false )
    {
    echo PHP_EOL . "ERROR: curl_exec() has failed." . PHP_EOL;
    }
    else
    {
    echo PHP_EOL . "INFO: Response Follows..." . PHP_EOL;
    echo PHP_EOL . $response;
    }