我试图找到一种无需cURL的方法,通过http web请求将数据发送到第三方支付网关.我开发了以下代码,实际上它与接收页面成功通信,但显然POST数据没有被发送.
<?php
function makeWebRequest()
{
//URL where to send the data via POST
$url = 'http://localhost/connect_to_gateway/receive.php';
//the actual data
$xml = '<?xml version="1.0" encoding="UTF-8"?>' .
'<test>' .
'Hi there!' .
'</test>';
$data = array('xml' => $xml);
//prepare the HTTP Headers
$content_type = 'text/xml';
$data = http_build_query($data);
// use key 'http' even if you send the request to https://...
$options = array(
'http' => array(
'method' => 'POST',
'header' => 'Content-type: ' . addslashes($content_type) .'\r\n'
. 'Content-Length: ' . strlen($data) …Run Code Online (Sandbox Code Playgroud) 我正在向API发出POST请求,我在Swift中成功获得了响应.以下是我的代码.
private func getData(url: NSURL) {
let config: NSURLSessionConfiguration = NSURLSessionConfiguration.defaultSessionConfiguration()
let session: NSURLSession = NSURLSession(configuration: config)
let dataTask: NSURLSessionDataTask = NSURLSession.sharedSession().dataTaskWithURL(url, completionHandler: {(data: NSData!, response: NSURLResponse!, error: NSError!) -> Void in
if error {
println("Error Occurred: \(error.localizedDescription)")
} else {
println("\(response.allHeaderFields)") // Error
}
})
dataTask.resume()
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用转储头字段allHeaderFields但是我收到一个错误,说NSURLResponse没有名为allHeaderFields的成员.但确实有它!
语法或我调用它的方式一定有问题.谁能告诉我如何纠正这个问题?
谢谢.
我正在传递用户名,API调用的密码返回正确的值。但是在身份验证API返回安全令牌后,我需要捕获令牌并传递用户名和密码。我在下面传递标头值的代码
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:[self HTTPMethod]];
[request setHTTPBody:self.requestData];
[request addValue:@"xyz" forHTTPHeaderField:@"username"];
[request addValue:@"xyz" forHTTPHeaderField:@"password"];
[request addValue:[[NSUserDefaults standardUserDefaults]valueForKey:@"Auth"] forHTTPHeaderField:@"Authorization"];
[request addValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
Run Code Online (Sandbox Code Playgroud)
我搜索了标头方法,但没有任何帮助。我在这里做错了什么。请任何人帮助我修复它。谢谢。
我目前正在使用以下方法来检查是否存在URL
$url = 'https://www.facebook.com/a-test-example-232397848665383511';
$headers = @get_headers($url);
if(strpos($headers[0],'200')===false){
print('NOT found!');
} else {
print('found!');
}
Run Code Online (Sandbox Code Playgroud)
NOT found!即使页面在访问时明确解析,也会打印.我打印标题,发现它是因为它返回一个302.有没有办法strpos测试所有可能解决的标头值?
标题的当前输出:
Array
(
[0] => HTTP/1.1 302 Found
[1] => Location: https://www.facebook.com/unsupportedbrowser
[2] => Vary: Accept-Encoding
[3] => Content-Type: text/html
// more array items
Run Code Online (Sandbox Code Playgroud)
如果我输入一个我知道失败的网址,我会得到以下信息:
Array
(
[0] => HTTP/1.1 404 Not Found
[1] => P3P: CP="Facebook does not have a P3P policy."
[2] => Strict-Transport-Security: max-age=15552000; preload
// rest of array
Run Code Online (Sandbox Code Playgroud)
仅仅测试404是否安全?
在我的应用程序中,我包含了来自不同服务器/域的页面.为简单起见我将把我的主要应用Web应用的一种,另幅B.
某处我甲,用户已登录后,我将加载从页面乙通过使用CORS和JWT.在A中,我创建了一个传递给Ajax的编码令牌.Ajax在Header中添加了这个令牌("Authorization" = bearer + encoded token).
B然后使用此令牌解码并获取它所属的usersId和组,并确定用户是否有权访问该资源.此外,Web B中还有一个Access-Control-Allow-Origin = Web A设置,仅接受来自A的请求.
我的问题是关于CORS的安全部分和jwt的使用.在开发过程中,当使用Postman直接访问B中的资源时,我可以轻松绕过" Access-control-allow-origin ".只要我有正确的令牌,资源就会被送回来没有问题!我的意思是只需要一些潜在的黑客获取该编码的字符串,他们就可以轻松地使用Postman查看资源.
在涉及安全部分时,下一步是什么,因为我完全迷失了!
希望我能清楚地解释这个问题.所有帮助都非常感谢
现在我有一个RESTful API,每当我的AngularJS服务访问我的端点时,它就会返回一个刷新的JWT授权令牌.我希望用户的浏览器localStorage通过创建的响应对象访问它来保存此令牌(作为会话的一部分)$httpProvider.intercepters.我的问题是我不知道如何获得该响应对象.我知道我的浏览器会看到响应标题以及我放在那里的所有自定义值:
我尝试访问response.headers,response.config.headers但没有一个包含我的值.显然浏览器会看到它,但我如何获得这些值?
我目前正在为我们所有的域(scripts.domain.com)开发一个中央AJAX脚本库。
我有以下PHP代码,从理论上讲,它可以很好地防止CORS的错误请求。
$valid_cors = array("domain1","domain2","domain3");
if(in_array($_SERVER['HTTP_ORIGIN'],"https://".$valid_cors)) {
header('Access-Control-Allow-Origin: https://{$valid_cors}', false);
header("Access-Control-Allow-Methods: GET, POST, PUT");
header("Access-Control-Allow-Headers: Content-Type");
}
Run Code Online (Sandbox Code Playgroud)
我敢打赌,您甚至可以在阅读之前就猜出我收到的消息。对于那些无法做到的人来说,这是以下几方面的事情:
XMLHttpRequest无法加载 https://scripts.domain.com/scripts/ajax_caller.json?。所请求的资源上没有“ Access-Control-Allow-Origin”标头。因此,不允许访问源“ https:// domain1 ”。
在阅读了这里的一些问题之后,据我了解,大多数浏览器甚至都没有发送HTTP_ORIGIN标头,因此,基本上整个ACAO系统都是毫无意义的,因为您必须将Allow-Origin标记为星号以允许多个域来调用它。您也不能放置多个AO标头,因为如果有多个AO标头,浏览器将完全阻止该请求。
到目前为止,我们都知道-不信任浏览器向您发送的任何内容,因为它很容易被伪造,那么为什么甚至认为它已经实现呢?
使用星号系统对我来说并不奇怪,因为我们会在调用任何动作文件之前检查CSRF和会话在执行时是否进行检查,但是对于大多数用户而言,这可能会带来更大的危害,而不是使它们陷入错误的安全感。 。
拜托,有人可以告诉我,我在这里用了错误的杆端并且我用错了吗?似乎没有多少人可以给答案栏加上星号,这使我更加相信这是唯一的方法。
我试图弄清楚如何处理HttpHeaders上的标头,以通过HttpClient将它们用于http请求.
const headers = new HttpHeaders();
headers.append('foo', 'bar');
headers.set('foo', 'bar');
console.log(headers.get('foo')) // null
Run Code Online (Sandbox Code Playgroud)
它只能这样工作:
const headers = new HttpHeaders().set('foo', 'bar');
console.log(headers.get('foo')) // bar
Run Code Online (Sandbox Code Playgroud)
有没有一种特殊的方法来添加标题?或者这是一个错误?
?你好,
我的HTTP请求有问题。是否可以帮助我了解发生了什么?
当我发送GET请求时,它作为OPTIONS发送:
let headers = new HttpHeaders();
headers = headers.set('Content-Type', 'application/json; charset=utf-8')
?.set('Authorization','bearer ' + this.auth.getUserToken());
this.http.get(SERVER.URL_PROD + API.VERSION + API.GET_USERS, {headers: headers}).subscribe((res: any) => {
console.log(res);
});
Run Code Online (Sandbox Code Playgroud)
在我的chrome开发工具调试中,我看到以下内容:
Request Method: OPTIONS
Status Code: 405 Method Not Allowed
Run Code Online (Sandbox Code Playgroud) 我可以用来curl成功发送我的请求,但golang似乎无法做到.
curl -H 'Host: aaa.com' 'http://bbb.com'
Run Code Online (Sandbox Code Playgroud)
我的问题是:如何向主机发送与主机不同的主机请求?