You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP Curl调用API遇阻:提交表单返回Locked并触发CORB错误

Hey there, let's tackle your issues step by step—you've got two main problems to resolve: the Locked response from the API and the Cross-Origin Read Blocking (CORB) error in the console. Let's break them down and fix them.

First: Fixing the CORB Error

CORB is a browser security measure that blocks cross-origin responses with unexpected MIME types. Since your form submits to your own connectapi.php script (same domain, presumably), this error likely stems from how your PHP script is returning the API's response.

Here's how to fix it:

  • Set the correct response MIME type: If the API returns JSON data (most common for APIs), force your PHP script to send a JSON header before echoing the response. Add this line right before echo $response;:
    header('Content-Type: application/json');
    
  • If the API actually returns HTML content, set the header to text/html instead. Just make sure your form page and connectapi.php are hosted on the same domain to avoid cross-origin flags entirely.

Second: Resolving the Locked API Response

This is the core issue—Locked usually means the API is rejecting your request due to validation or permission issues. Let's go through the most likely fixes:

1. Fix Parameter Encoding (Critical!)

You're manually building your POST parameters as a string, which doesn't handle special characters (like spaces, @, or +) correctly. Use PHP's http_build_query() to automatically encode parameters properly:

// Replace your manual $mergeall with this:
$params = array(
    'country' => $country,
    'currency_code' => $currency_code,
    'email' => $email,
    'first_name' => $first_name,
    'last_name' => $last_name,
    'phone' => $phone,
    'gmt_timezone' => $gmt_timezone,
    'password' => $password,
    'lang' => 'en',
    'campaign_id' => '5f901a2XXXXX'
);
$mergeall = http_build_query($params);

2. Fix the CURL Request Header Format

Your CURLOPT_HTTPHEADER is set as a string, but CURL expects an array. This can cause the API to misinterpret your request:

// Replace the single string with an array:
CURLOPT_HTTPHEADER => array(
    "Content-Type: application/x-www-form-urlencoded"
)

3. Verify API Permissions & Details

Double-check these key details:

  • Is your api_key valid and authorized to use the create-client endpoint?
  • Is the API endpoint URL correct (no typos in the path or domain)?
  • Have you confirmed all required parameters are being sent (the API might have hidden required fields not listed in your form)?

4. Add Debugging to Catch CURL Errors

Add error checking to your CURL call to see if there's a hidden issue with the request itself:

$response = curl_exec($curl);
// Check for CURL errors
if(curl_errno($curl)) {
    $error_msg = curl_error($curl);
    header('Content-Type: application/json');
    echo json_encode(array('curl_error' => $error_msg));
    curl_close($curl);
    exit;
}

Full Optimized PHP Code

Here's your updated PHP script with all the fixes and added debugging:

<?php
// First, validate that all required POST parameters exist
if (!isset($_POST['country'], $_POST['currency_code'], $_POST['email'], $_POST['first_name'], $_POST['last_name'], $_POST['phone'], $_POST['gmt_timezone'], $_POST['password'])) {
    header('Content-Type: application/json');
    echo json_encode(array('error' => 'Missing required form fields'));
    exit;
}

// Grab form data
$country = $_POST['country'];
$currency_code = $_POST['currency_code'];
$email = $_POST['email'];
$first_name = $_POST['first_name'];
$last_name = $_POST['last_name'];
$phone = $_POST['phone'];
$gmt_timezone = $_POST['gmt_timezone'];
$password = $_POST['password'];
$lang = "en";
$campaign_id = "5f901a2XXXXX";

// Build properly encoded parameters
$params = array(
    'country' => $country,
    'currency_code' => $currency_code,
    'email' => $email,
    'first_name' => $first_name,
    'last_name' => $last_name,
    'phone' => $phone,
    'gmt_timezone' => $gmt_timezone,
    'password' => $password,
    'lang' => $lang,
    'campaign_id' => $campaign_id
);
$mergeall = http_build_query($params);

// Initialize CURL
$curl = curl_init();
curl_setopt_array($curl, array(
    CURLOPT_URL => "XXXXXX/api/users/XXXX/create-client?api_key=DrvgCdyhZXXXXXIn3ZNOsfu1udUGtk1603704804844",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 0,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_POSTFIELDS => $mergeall,
    CURLOPT_HTTPHEADER => array(
        "Content-Type: application/x-www-form-urlencoded"
    )
));

// Execute request and check for errors
$response = curl_exec($curl);
if(curl_errno($curl)) {
    $error_msg = curl_error($curl);
    header('Content-Type: application/json');
    echo json_encode(array('curl_error' => $error_msg));
    curl_close($curl);
    exit;
}
curl_close($curl);

// Return response with correct MIME type
header('Content-Type: application/json');
echo $response;
?>

Extra Debugging Tip

If you're still getting Locked, enable verbose CURL logging to see exactly what's being sent to the API:
Add these lines to your curl_setopt_array call:

CURLOPT_VERBOSE => true,
CURLOPT_STDERR => fopen('curl_debug_log.txt', 'w')

Run your form submission, then check curl_debug_log.txt for the full request/response details—this will often reveal exactly why the API is rejecting your request.

内容的提问来源于stack exchange,提问作者CodeLyoko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 18:07:46