如何发送自定义 HTTP header 作为响应?
How to send custom HTTP header in response?
我想在我的 HTTP Header 中发送 json 数据。
我正在使用 Codeigniter PHP,所以我在我的控制器中这样做了:
header('Content-Type: application/json');'
这是我的代码:
$request = array(
'request' => $_GET['request'],
'device_id' => $_GET['device_id'],
'launch_date'=> $_GET['launch_date'],
'allowed_hours'=>$_GET['allowed_hours'],
'site_id'=>$_GET['site_id'],
'product'=>$_GET['product'],
'software_version'=>$_GET['software_version'],
'platform_os'=>$_GET['platform_os'],
'platform'=>$_GET['platform'],
'platform_model'=>$_GET['platform_model']
);
$response = array(
'response_code' =>200 ,
'device_id'=>$_GET['device_id'],
'allowed_hours'=>$_GET['allowed_hours'],
'product'=>'mlc',
'prov_ur'=>NULL
);
header('Content-Type: application/json');
echo json_encode( $response );
但是当我打印 header 我得到
A PHP Error was encountered
Severity: Notice
Message: Undefined index: request
Filename: admin/license.php
Line Number: 22
A PHP Error was encountered
Severity: Notice
Message: Undefined index:
allowed_hours
Filename: admin/license.php
Line Number:
25
A PHP Error was encountered
Severity: Notice
Message: Undefined index:
allowed_hours
Filename: admin/license.php
Line Number:
40
{"response_code":200,"device_id":"70D0D01FBAD2","allowed_hours":null,"product":"mlc","prov_ur":null}array(10)
{ ["Host"]=> string(14) "192.168.50.123" ["Connection"]=>
string(10) "keep-alive" ["Cache-Control"]=> string(9) "max-age=0"
["Accept"]=> string(74)
"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8"
["Upgrade-Insecure-Requests"]=> string(1) "1" ["User-Agent"]=>
string(110) "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36"
["Accept-Encoding"]=> string(19) "gzip, deflate, sdch"
["Accept-Language"]=> string(14) "en-US,en;q=0.8" ["Cookie"]=>
string(518)
"cisession=OhhBBhVodwwf7Tb55AVsU32ClMS5cgmxBl15WHA%2BrGnvo1kiK%2B67BWeAuJVSV2MY25zZd0riHC9cyx9fiigiBuqkPMT%2FKE9d6et%2FXaE3F7I59P9%2FEzy5byQ5nEkJq5xwXoH1I7%2B7v62cQL21%2Bjfnk3AwIy4luM7N51IUuTqg7TxunoZFD1gJO84r8degY1imNpmDk2W%2FjsQPn9bQpkWJ9KVMxxViFDaELEU0rIfYmif%2BdvXjK9W%2Fj7iWQxZYE9ZGazgBTKlLO%2BJZHNdPrdmGPFTzTUROZdffpF%2Bb25bRMPEJsZ9CE2mdVuSn%2FEu678utd0lcd9bh%2BDbTDikrHP4jBFOLbZfWKT%2F9r5GkMBrLBl%2BlvPx9RbAq%2FIsjeA1V7c6JYf41TO1bG2XKT14QFHm8m0qY8HCal%2B%2BR8tZe9i3zy24%3Dcfc459942e4ef82a5554257216a19d621f446a25"
["If-Modified-Since"]=> string(29) "Thu, 01 Jan 1970 00:00:00 GMT" }
{"response_code":200,"device_id":"70D0D01FBAD2","allowed_hours":null,"product":"mlc","prov_ur":null}
在我的回复中。我不想在我的 HTTP header 响应中发送其他数据。
根据 CI
更新代码
public function index()
{
$request = array(
'request' => $this->get('request'),
'device_id' => $this->get('device_id'),
'launch_date'=> $this->get('launch_date'),
'allowed_hours'=>$this->get('allowed_hours'),
'site_id'=> $this->get('site_id'),
'product'=>$this->get('product'),
'software_version'=> $this->get('software_version'),
'platform_os'=> $this->get('platform_os'),
'platform'=> $this->get('platform'),
'platform_model'=> $this->get('platform_model')
);
$response = array(
'response_code' =>200 ,
'device_id'=> $this->get('device_id'),
'allowed_hours'=> $this->get('allowed_hours'),
'product'=>'mlc',
'prov_ur'=>NULL
);
$this->output->set_content_type('Content-Type: application/json');
return $this->output
->set_content_type('Content-Type: application/json')
->set_output(json_encode($response));
echo $response;
}
问题是你的一些 $_GET
变量没有设置,这会抛出一个错误(你有额外的输出文本)并且可以通过在使用它们之前先检查它们是否为空来防止.
$request = array(
'request' => !empty($_GET['request']) ? $_GET['request'] : '',
'device_id' => !empty($_GET['device_id']) ? $_GET['device_id'] : '',
'launch_date'=> !empty($_GET['launch_date']) ? $_GET['launch_date'] : '',
'allowed_hours'=> !empty($_GET['allowed_hours']) ? $_GET['allowed_hours'] : '',
'site_id'=> !empty($_GET['site_id']) ? $_GET['site_id'] : '',
'product'=> !empty($_GET['product']) ? $_GET['product'] : '',
'software_version'=> !empty($_GET['software_version']) ? $_GET['software_version'] : '',
'platform_os'=> !empty($_GET['platform_os']) ? $_GET['platform_os'] : '',
'platform'=> !empty($_GET['platform']) ? $_GET['platform'] : '',
'platform_model'=> !empty($_GET['platform_model']) ? $_GET['platform_model'] : ''
);
$response = array(
'response_code' =>200 ,
'device_id'=> !empty($_GET['device_id']) ? $_GET['device_id'] : '',
'allowed_hours'=> !empty($_GET['allowed_hours']) ? $_GET['allowed_hours'] : '',
'product'=>'mlc',
'prov_ur'=>NULL
);
header('Content-Type: application/json');
echo json_encode( $response );
像下面这样使用正常的php get有时会抛出一些错误
$_GET['allowed_hours'];
我建议更改 codeIgniter 输入 class 方法。
$this->input->get('allowed_hours');
Codeigniter Input Class 将为您节省大量代码。
如用户指南中所述:使用 CodeIgniter 的内置方法,您可以简单地执行此操作:
更新:
$request = array(
'request' => $this->input->get('request'),
'device_id' => $this->input->get('device_id'),
'launch_date'=> $this->input->get('launch_date'),
'allowed_hours'=> $this->input->get('allowed_hours'),
'site_id'=> $this->input->get('site_id'),
'product'=>$this->input->get('product'),
'software_version'=> $this->input->get('software_version'),
'platform_os'=> $this->input->get('platform_os'),
'platform'=> $this->input->get('platform'),
'platform_model'=> $this->input->get('platform_model')
);
Codeigniter 有自己的 Output Class
和
$response = array(
'response_code' => 200,
'device_id'=> $this->input->get('device_id'),
'allowed_hours'=> $this->input->get('allowed_hours'),
'product'=> 'mlc',
'prov_ur'=> NULL
);
return $this->output
->set_content_type('Content-Type: application/json')
->set_output(json_encode($response));
我想在我的 HTTP Header 中发送 json 数据。
我正在使用 Codeigniter PHP,所以我在我的控制器中这样做了:
header('Content-Type: application/json');'
这是我的代码:
$request = array(
'request' => $_GET['request'],
'device_id' => $_GET['device_id'],
'launch_date'=> $_GET['launch_date'],
'allowed_hours'=>$_GET['allowed_hours'],
'site_id'=>$_GET['site_id'],
'product'=>$_GET['product'],
'software_version'=>$_GET['software_version'],
'platform_os'=>$_GET['platform_os'],
'platform'=>$_GET['platform'],
'platform_model'=>$_GET['platform_model']
);
$response = array(
'response_code' =>200 ,
'device_id'=>$_GET['device_id'],
'allowed_hours'=>$_GET['allowed_hours'],
'product'=>'mlc',
'prov_ur'=>NULL
);
header('Content-Type: application/json');
echo json_encode( $response );
但是当我打印 header 我得到
A PHP Error was encounteredSeverity: Notice
Message: Undefined index: request
Filename: admin/license.php
Line Number: 22
A PHP Error was encounteredSeverity: Notice
Message: Undefined index: allowed_hours
Filename: admin/license.php
Line Number: 25
A PHP Error was encounteredSeverity: Notice
Message: Undefined index: allowed_hours
Filename: admin/license.php
Line Number: 40
{"response_code":200,"device_id":"70D0D01FBAD2","allowed_hours":null,"product":"mlc","prov_ur":null}array(10) { ["Host"]=> string(14) "192.168.50.123" ["Connection"]=>
string(10) "keep-alive" ["Cache-Control"]=> string(9) "max-age=0" ["Accept"]=> string(74) "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8" ["Upgrade-Insecure-Requests"]=> string(1) "1" ["User-Agent"]=>
string(110) "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36"
["Accept-Encoding"]=> string(19) "gzip, deflate, sdch"
["Accept-Language"]=> string(14) "en-US,en;q=0.8" ["Cookie"]=>
string(518) "cisession=OhhBBhVodwwf7Tb55AVsU32ClMS5cgmxBl15WHA%2BrGnvo1kiK%2B67BWeAuJVSV2MY25zZd0riHC9cyx9fiigiBuqkPMT%2FKE9d6et%2FXaE3F7I59P9%2FEzy5byQ5nEkJq5xwXoH1I7%2B7v62cQL21%2Bjfnk3AwIy4luM7N51IUuTqg7TxunoZFD1gJO84r8degY1imNpmDk2W%2FjsQPn9bQpkWJ9KVMxxViFDaELEU0rIfYmif%2BdvXjK9W%2Fj7iWQxZYE9ZGazgBTKlLO%2BJZHNdPrdmGPFTzTUROZdffpF%2Bb25bRMPEJsZ9CE2mdVuSn%2FEu678utd0lcd9bh%2BDbTDikrHP4jBFOLbZfWKT%2F9r5GkMBrLBl%2BlvPx9RbAq%2FIsjeA1V7c6JYf41TO1bG2XKT14QFHm8m0qY8HCal%2B%2BR8tZe9i3zy24%3Dcfc459942e4ef82a5554257216a19d621f446a25" ["If-Modified-Since"]=> string(29) "Thu, 01 Jan 1970 00:00:00 GMT" }
{"response_code":200,"device_id":"70D0D01FBAD2","allowed_hours":null,"product":"mlc","prov_ur":null}
在我的回复中。我不想在我的 HTTP header 响应中发送其他数据。
根据 CI
更新代码public function index()
{
$request = array(
'request' => $this->get('request'),
'device_id' => $this->get('device_id'),
'launch_date'=> $this->get('launch_date'),
'allowed_hours'=>$this->get('allowed_hours'),
'site_id'=> $this->get('site_id'),
'product'=>$this->get('product'),
'software_version'=> $this->get('software_version'),
'platform_os'=> $this->get('platform_os'),
'platform'=> $this->get('platform'),
'platform_model'=> $this->get('platform_model')
);
$response = array(
'response_code' =>200 ,
'device_id'=> $this->get('device_id'),
'allowed_hours'=> $this->get('allowed_hours'),
'product'=>'mlc',
'prov_ur'=>NULL
);
$this->output->set_content_type('Content-Type: application/json');
return $this->output
->set_content_type('Content-Type: application/json')
->set_output(json_encode($response));
echo $response;
}
问题是你的一些 $_GET
变量没有设置,这会抛出一个错误(你有额外的输出文本)并且可以通过在使用它们之前先检查它们是否为空来防止.
$request = array(
'request' => !empty($_GET['request']) ? $_GET['request'] : '',
'device_id' => !empty($_GET['device_id']) ? $_GET['device_id'] : '',
'launch_date'=> !empty($_GET['launch_date']) ? $_GET['launch_date'] : '',
'allowed_hours'=> !empty($_GET['allowed_hours']) ? $_GET['allowed_hours'] : '',
'site_id'=> !empty($_GET['site_id']) ? $_GET['site_id'] : '',
'product'=> !empty($_GET['product']) ? $_GET['product'] : '',
'software_version'=> !empty($_GET['software_version']) ? $_GET['software_version'] : '',
'platform_os'=> !empty($_GET['platform_os']) ? $_GET['platform_os'] : '',
'platform'=> !empty($_GET['platform']) ? $_GET['platform'] : '',
'platform_model'=> !empty($_GET['platform_model']) ? $_GET['platform_model'] : ''
);
$response = array(
'response_code' =>200 ,
'device_id'=> !empty($_GET['device_id']) ? $_GET['device_id'] : '',
'allowed_hours'=> !empty($_GET['allowed_hours']) ? $_GET['allowed_hours'] : '',
'product'=>'mlc',
'prov_ur'=>NULL
);
header('Content-Type: application/json');
echo json_encode( $response );
像下面这样使用正常的php get有时会抛出一些错误
$_GET['allowed_hours'];
我建议更改 codeIgniter 输入 class 方法。
$this->input->get('allowed_hours');
Codeigniter Input Class 将为您节省大量代码。
如用户指南中所述:使用 CodeIgniter 的内置方法,您可以简单地执行此操作:
更新:
$request = array(
'request' => $this->input->get('request'),
'device_id' => $this->input->get('device_id'),
'launch_date'=> $this->input->get('launch_date'),
'allowed_hours'=> $this->input->get('allowed_hours'),
'site_id'=> $this->input->get('site_id'),
'product'=>$this->input->get('product'),
'software_version'=> $this->input->get('software_version'),
'platform_os'=> $this->input->get('platform_os'),
'platform'=> $this->input->get('platform'),
'platform_model'=> $this->input->get('platform_model')
);
Codeigniter 有自己的 Output Class
和
$response = array(
'response_code' => 200,
'device_id'=> $this->input->get('device_id'),
'allowed_hours'=> $this->input->get('allowed_hours'),
'product'=> 'mlc',
'prov_ur'=> NULL
);
return $this->output
->set_content_type('Content-Type: application/json')
->set_output(json_encode($response));