我正在开发一个Web应用程序,用于从160by2等网站向移动设备发送短信.
我可以准备HTTP GET请求所需的URL,如SMS Gateway提供商smslane.com提供的API中所述,这里是API的链接.
如何从PHP发送HTTP请求?
我为此目的使用了cURL,但没有显示响应.这是我用过的代码,
<?php
$url="http://smslane.com/vendorsms/pushsms.aspx?user=abc&password=xyz&msisdn=919898123456&sid=WebSMS&msg=Test message from SMSLane&fl=0";
$ch = curl_init();
curl_setopt( $ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20041001 Firefox/0.10.1" );
curl_setopt( $ch, CURLOPT_URL, $url );
$content = curl_exec( $ch );
$response = curl_getinfo( $ch );
curl_close ( $ch );
echo $content;
?>
Run Code Online (Sandbox Code Playgroud)
fsockopen()没有使用,因为端口号未知,邮寄支持团队的端口号.(如果邀请任何通过GET方法的fsockopen代码:).)
这有什么其他方法吗?
欢迎任何帮助.
提前致谢.
编辑
任何人都可以告诉我除了cURL之外还有其他任何方式发送此HTTP请求,如果可能的话,还可以为此提供代码.
我问这是因为当前的cURL代码花了太多时间执行并在60秒后失败,我在本地系统上的php.ini中将max_execution_time增加到120,即使它对我没有好处:(.
在html表单中有大量的模型绑定示例,但我想知道它是否可能,如果是这样,如何使用ActionLinks/GET请求的模型绑定.
所以,给出以下模型
public class Lurl
{
public string Str {get;set;}
public char Chr {get;set;}
public double Dbl {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
和以下路线(我不确定这将如何形成;我提出它以显示我希望URL如何呈现属性Str,Chr和Dbl)
routes.MapRoute(
"LurlRoute",
"Main/Index/{str}/{chr}/{dbl}",
new
{
controller = "Main",
action = "Index",
lurl = (Lurl)null
}
);
Run Code Online (Sandbox Code Playgroud)
我想在我的Controller中以这种方式使用它
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Index(Lurl lurl)
{
/* snip */
}
Run Code Online (Sandbox Code Playgroud)
这种方式在我的页面中(两种可能的选择;还有更多吗?)
<div class="links">
<%Html.ActionLink("Link one", "Index", new { lurl = Model })%><br />
<%Html.ActionLink("Link two", "Index",
new { str = Model.Str, chr = Model.Chr, dbl = Model.Dbl })%>
</div>
Run Code Online (Sandbox Code Playgroud)
这可能与模型绑定基础结构有关吗?如果是这样,我的样品需要做些什么才能使它们起作用?
如果我创建一个控制器动作并且不用它装饰它AcceptVerbs,HttpPost或者HttpGet.什么是默认行为?
该操作是否允许任何访问方法或默认为GET?
本周早些时候,我不得不做一些感觉违反语义的事情.让我解释.
我正在制作一个简单的AJAX客户端应用程序,它向具有给定数量参数的服务发出请求.由于整个应用程序基本上是只读的,我认为使用HTTP GET是可行的方法.我必须传递的一些参数很简单(例如排序顺序或页码).
但是,其中一个必需的参数可能是可变长度的,这让我很担心.由于我编写了GET请求的查询字符串中的所有参数,因此在我看来,这为请求URL设置了(大约)2000个字符的不必要的上限.无论如何,我不喜欢看到500个字符长的请求URL.
因此,由于POST请求没有这样的限制,我决定切换.但这感觉不对.我的印象是POST表示数据的修改 - 但我将它用于简单的只读请求.
有一个更好的方法吗?要执行GET,有多个参数?我听说过一种方法 - 你自己对参数进行初步POST ,然后执行GET.但是,这种技术还有很多不足之处.
但是从这个具体案例来看,HTTP请求方法的真正语义和局限是什么?为什么GET不支持任何类型的参数有效载荷?使用URL中的查询字符串对我来说几乎感觉像是一个黑客.
我有一个AngularJS应用中,我试图从服务器获取与$ HTTP GET XML数据说http://example.com/a/b/c/d/getDetails?fname=abc&lname=def(此通过在浏览器中输入链接手动访问时显示XML文件的树结构).
当我运行应用程序时,不会获取该链接中的数据.相反,它显示状态为0的错误.
//url = http://example.com/a/b/c/d/getDetails?fname=abc&lname=def
$http.get(url).success(function (data){
alert("Success");
deferred.resolve(data);
}).error(function (data, status){
console.log("Error status : " + status);
});
Run Code Online (Sandbox Code Playgroud)
我不确定为什么$ http.get失败并转到错误函数返回状态0.
但是如果我将URL传递给具有JSON对象的本地服务器,它就可以工作.
是因为我试图从不同的域(CORS问题?)或其他东西访问XML文件?
请帮帮我!
在我的代码中,我使用一些Http Get请求将一些文件作为流下载.我使用以下代码:
public String getClassName(String url) throws ClientProtocolException, IOException {
HttpResponse response = sendGetRequestJsonText(url);
Header[] all = response.getAllHeaders();
for (Header h : all) {
System.out.println(h.getName() + ": " + h.getValue());
}
Header[] headers = response.getHeaders("Content-Disposition");
InputStreamParser.convertStreamToString(response.getEntity().getContent());
String result = "";
for (Header header : headers) {
result = header.getValue();
}
return result.substring(result.indexOf("''") + "''".length(), result.length()).trim();
}
Run Code Online (Sandbox Code Playgroud)
但是这会下载响应的完整内容.我想只检索没有内容的http标头.HEAD请求似乎不起作用,因为我得到状态501,没有实现.我怎样才能做到这一点?
我有一个.net mvc 4 webapi项目,我试图将一个对象数组传递给我的控制器上的方法.
我在这里找到了一些关于需要设置我的对象属性的例子:param1 = whatever¶m2 = bling¶m3 = blah.
但我不知道如何使用它来传递集合.
这是我的方法签名.注意我用[FromUri]属性修饰了参数.
public List<PhoneResult> GetPhoneNumbersByNumbers([FromUri] PhoneRequest[] id)
{
List<PhoneResult> prs = new List<PhoneResult>();
foreach (PhoneRequest pr in id)
{
prs.Add(PhoneNumberBL.GetSinglePhoneResult(pr.PhoneNumber, pr.RfiDate, pr.FinDate, pr.State));
}
return prs;
}
Run Code Online (Sandbox Code Playgroud)
这是我简单的PhoneRequest对象:
public class PhoneRequest
{
public string PhoneNumber { get; set; }
public string RfiDate { get; set; }
public string FinDate { get; set; }
public string State { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这是我用来传递的样本:
http://localhost:3610/api/phonenumber/getphonenumbersbynumbers/
[{"PhoneNumber":"8016667777","RfiDate":"","FinDate":"2012-02-11","State":"UT"},
{"PhoneNumber":"8018889999","RfiDate":"2012-12-01","FinDate":"","State":"UT"}]
Run Code Online (Sandbox Code Playgroud)
用这个"坏请求"回来
我也尝试过这个
http://localhost:3610/api/phonenumber/getphonenumbersbynumbers?
id=[{"PhoneNumber":"8016667777","RfiDate":"","FinDate":"2012-02-11","State":"UT"}, …Run Code Online (Sandbox Code Playgroud) 我正在建立一个教练网站,通过使用社交媒体帮助人们过上更健康的生活.目前我正在使用前端AngularJS的ExpressJS服务器中的OAuth访问Twitter.
200到299之间的响应状态代码被视为成功状态,将导致调用成功回调.请注意,如果响应是重定向,则XMLHttpRequest将透明地跟随它,这意味着不会为此类响应调用错误回调.
我的服务器的完整代码可以在github上的web.js和twitter.js中找到,但这是调用者:
function LoginCtrl($scope, $http, $location) {
$scope.welcome = 'Sign in with Twitter';
$http.defaults.useXDomain = true;
$scope.submit = function() {
$http({method: 'GET', url: '/sessions/connect'}).
success(function(data, status) {
$scope.welcome = data;
});
};
}
Run Code Online (Sandbox Code Playgroud)
这是web.js中的被调用者:
app.get('/sessions/connect', function(req, res){
consumer().getOAuthRequestToken(function(error, oauthToken, oauthTokenSecret, results){
if (error) {
res.send("Error getting OAuth request token : " + sys.inspect(error), 500);
} else {
req.session.oauthRequestToken = oauthToken;
req.session.oauthRequestTokenSecret = oauthTokenSecret;
res.redirect("https://api.twitter.com/oauth/authorize?oauth_token="+req.session.oauthRequestToken);
}
});
});
Run Code Online (Sandbox Code Playgroud)
如果我查一下tcpdump(对不起我是老式的),我看到: …
我有一个现有的angularjs代码,它可以生成HTTP GET.下面提取的是控制器内部的一些相关代码.
.controller('imptViewCtrl', ['$scope', '$http',
function ($scope, $http, ) {
var url = $configuration.webroot + '/impt/list?list=testlist';
$http.get(url).then(function (response) {
tableData = response.data;
});
}]);
Run Code Online (Sandbox Code Playgroud)
我想将HTTP基本身份验证添加到HTTP GET.用户名是foo,密码是bar.如何才能做到这一点?
我实际上正在重写我们工作中的一些 API(在 ASP.Net Core 3.1 中),并尝试使它们成为 RESTFull。我遇到一些方法,应该使用 HTTP GET 调用它,因为它用于检索一些数据,但参数包装在一个相当大的 DTO 中。
所以我问自己如何应对:
我认为更好的解决方案是将 HTTP Get 与 body 一起使用(根据这篇文章https://thecodebuzz.com/http-get-delete-request-body-guidelines/这是可能的)
有人遇到同样的问题吗?现在的指导方针是什么?
谢谢你的想法
http-get ×10
http ×4
angularjs ×3
http-post ×2
javascript ×2
acceptverbs ×1
apache ×1
api ×1
asp.net-mvc ×1
c# ×1
cors ×1
httprequest ×1
java ×1
php ×1
redirect ×1
rest ×1
sms ×1
sms-gateway ×1
xml ×1