怎么知道oracle http post请求发送http请求成功

23:19 提问
httpclient提交一个请求返回的都是200的状态码,如何判断怎么是成功的怎么是失败的
httpclient提交一个用于登录的请求,但是返回的都是200的状态码,如何判断怎么是成功的怎么是失败的呢?
按赞数排序
已解决,原因是由于学校的教务网出现问题了,才导致模拟不成功
返回200说明在http层面都是成功的。你说的失败应该是指返回的数据中包含错误信息,那么你需要对返回的数据进行判断。
如果返回的是200的话,那就是成功的!否则就是失败的!
从这里看你应该使用的是post方式(你需要传递用户/密码)。你可以用PostAsync获取response,然后分析response啊。caozhy说的是对的,200只表明http协议层,你访问到一个资源,但是应用层你的程序是否通过校验,是由你的程序逻辑决定的。这就需要server端返回信息至client端
明显是有302跳转的。
返回状态码 200 表示通讯正常完成了
判断登录是否成功,要依据返回的内容
其实具体需要看服务器返回的参数。
你可以解析服务器返回参数 一般来说登陆成功会返回taken等信息
其他相关推荐2015年7月 移动开发大版内专家分月排行榜第二2015年5月 移动开发大版内专家分月排行榜第二
2015年7月 扩充话题大版内专家分月排行榜第三2015年5月 扩充话题大版内专家分月排行榜第三
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。QT 发送http请求及处理
1)http请求数据组装及发送至服务端
void XXXX::postMsg(QString url, QByteArray data)
request.setHeader(QNetworkRequest::ContentTypeHeader, &application/x-www-form-urlencoded&);
QUrl u = QUrl(QString(&%1%2%3&).arg(hostUrl).arg(basePath).arg(url));
request.setUrl(u);
manager.post(request, data);
2)请求返回处理函数
void X'X'XX::on_networkFinished(QNetworkReply *replys)
QByteArray byte_array = replys-&readAll();
QJsonObject json_object = QJsonDocument::fromJson(byte_array).object();
int code = json_object.value(&code&).toInt();
QString msg = json_object.value(&msg&).toString();
if (code != 0)
QMessageBox msgB
msgBox.setText(msg);
msgBox.setWindowTitle(QStringLiteral(&登录&));
msgBox.exec();
QUrl url = replys-&request().url();
QString path = url.path().right(url.path().length() - basePath.length());
if (pare(PATH_LOGIN) == 0)
3)槽函数信号关联
connect(&manager, SIGNAL(finished(QNetworkReply*)), SLOT(on_networkFinished(QNetworkReply*)));标签:至少1个,最多5个
请求过程整体流程:域名解析 --& 发起TCP的3次握手 --& 建立TCP连接后发起http请求 --& 服务器响应http请求,浏览器得到html代码 --& 浏览器解析html代码,并请求html代码中的资源(如js、css、图片等) --& 浏览器对页面进行渲染呈现给用户.下面以Chrome浏览器访问
为例按流程逐个分析:
Chrome浏览器会首先搜索浏览器自身的DNS缓存(缓存时间比较短,大概只有1分钟,且只能容纳1000条缓存),看自身的缓存中是否有
对应的条目,而且没有过期,如果有且没有过期则解析到此结束。
注:我们可以使用 chrome://net-internals/#dns 来进行查看Chrome自身的缓存。
如果浏览器自身的缓存里面没有找到对应的条目,那么Chrome会搜索操作系统自身的DNS缓存,如果找到且没有过期则停止搜索解析到此结束.
注:以Windows系统为例,可以在命令行下使用 ipconfig /displaydns 来进行查看操作系统自身的DNS缓存
如果在Windows系统的DNS缓存也没有找到,那么尝试读取hosts文件(位于C:\Windows\System32\drivers\etc),看看这里面有没有该域名对应的IP地址,如果有则解析成功。
如果在hosts文件中也没有找到对应的条目,浏览器就会发起一个DNS的系统调用,就会向本地配置的首选DNS服务器(一般是电信运营商提供的,也可以使用像Google提供的DNS服务器)发起域名解析请求(通过的是UDP协议向DNS的53端口发起请求,这个请求是递归的请求,也就是运营商的DNS服务器必须得提供给我们该域名的IP地址),运营商的DNS服务器首先查找自身的缓存,找到对应的条目,且没有过期,则解析成功。如果没有找到对应的条目,则有运营商的DNS代我们的浏览器发起迭代DNS解析请求,它首先是会找根域的DNS的IP地址(这个DNS服务器都内置13台根域的DNS的IP地址),找打根域的DNS地址,就会向其发起请求(请问
这个域名的IP地址是多少啊?),根域发现这是一个顶级域com域的一个域名,于是就告诉运营商的DNS我不知道这个域名的IP地址,但是我知道com域的IP地址,你去找它去,于是运营商的DNS就得到了com域的IP地址,又向com域的IP地址发起了请求(请问这个域名的IP地址是多少?),com域这台服务器告诉运营商的DNS我不知道这个域名的IP地址,但是我知道这个域的DNS地址,你去找它去,于是运营商的DNS又向这个域名的DNS地址(这个一般就是由域名注册商提供的,像万网,新网等)发起请求(请问这个域名的IP地址是多少?),这个时候域的DNS服务器一查,诶,果真在我这里,于是就把找到的结果发送给运营商的DNS服务器,这个时候运营商的DNS服务器就拿到了这个域名对应的IP地址,并返回给Windows系统内核,内核又把结果返回给浏览器,终于浏览器拿到了
对应的IP地址,该进行一步的动作了。运营商dns --& 根域名服务器 --& 顶级域名服务器 --& 域名注册商服务器
发起TCP的3次握手
拿到域名对应的IP地址之后,User-Agent(一般是指浏览器)会以一个随机端口(1024 & 端口 & 65535)向服务器的WEB程序(常用的有httpd,nginx等)80端口发起TCP的连接请求。这个连接请求(原始的http请求经过TCP/IP4层模型的层层封包)到达服务器端后(这中间通过各种路由设备,局域网内除外),进入到网卡,然后是进入到内核的TCP/IP协议栈(用于识别该连接请求,解封包,一层一层的剥开),还有可能要经过Netfilter防火墙(属于内核的模块)的过滤,最终到达WEB程序,最终建立了TCP/IP的连接。
三次握手抓包截图:
建立TCP连接后发起http请求
进过TCP3次握手之后,浏览器发起了http的请求,使用的http的方法 GET 方法,请求的URL是 / ,协议是HTTP/1.1
http请求报文格式
服务器端响应http请求,浏览器得到html代码
http响应报文格式
http状态码
信息,服务器收到请求,需要请求者继续执行操作
成功,操作被成功接收并处理
重定向,需要进一步的操作以完成请求
客户端错误,请求包含语法错误或无法完成请求
服务器错误,服务器在处理请求的过程中发生了错误
浏览器解析html代码,并请求html代码中的资源
浏览器拿到index.html文件后,就开始解析其中的html代码,遇到js/css/image等静态资源时,就向服务器端去请求下载(会使用多线程下载,每个浏览器的线程数不一样),这个时候就用上keep-alive特性了,建立一次HTTP连接,可以请求多个资源,下载资源的顺序就是按照代码里的顺序,但是由于每个资源大小不一样,而浏览器又多线程请求请求资源,所以显示的顺序并不一定是代码里面的顺序。
浏览器在请求静态资源时(在未过期的情况下),向服务器端发起一个http请求(询问自从上一次修改时间到现在有没有对资源进行修改),如果服务器端返回304状态码(告诉浏览器服务器端没有修改),那么浏览器会直接读取本地的该资源的缓存文件。
详细的浏览器工作原理请看:
浏览器对页面进行渲染呈现给用户
最后,浏览器利用自己内部的工作机制,把请求到的静态资源和html代码进行渲染,渲染之后呈现给用户。
参考文献:
0 收藏&&|&&0
你可能感兴趣的文章
2 收藏,270
分享到微博?
技术专栏,帮你记录编程中的点滴,提升你对技术的理解收藏感兴趣的文章,丰富自己的知识库
明天提醒我
我要该,理由是:nodejs发送http请求,如何保持获取的数据,并且返回到页面 - CNode技术社区
这家伙很懒,什么个性签名都没有留下。
var data=&&;
router.post(’/report/get’,function(reqs,res){
var urlStr=’http://xxxxxxx/slot/list';//发送的请求地址
var body=reqs.//发送的字段{colNum,currentPage}
console.log(“colNum”+JSON.stringify(body));
var contentStr=queryString.stringify(body);
“hostname”:url.parse(urlStr).hostname,
“path”:url.parse(urlStr).path,
“method”:“POST”,
“port”:3000,
“headers”:{
‘Content-Type’: ‘application/x-www-form-urlencoded’,
‘Content-Length’: Buffer.byteLength(contentStr, ‘utf8’)
var httpModule = urlStr.indexOf(‘https’) === 0 ? https :
var req = httpModule.request(opt, function(httpRes) {
var buffers = [];
httpRes.on(‘data’, function(chunk) {
buffers.push(chunk);
httpRes.on('end', function(chunk) {
var wholeData = Buffer.concat(buffers);
var dataStr = wholeData.toString('utf8');
console.log('content'+wholeData);
data=wholeD
//res.send(JSON.stringify(buffers));
}).on('error', function(err) {
console.log('error ' + err);
//写入数据,完成发送
req.write(contentStr);
req.end();
res.send(JSON.stringify(data));
由于异步的原因,返回的data都是初始的时候的数据,怎样才能保持下来,返回到页面
把最后一句放到你注释的那一行。出错的时候再发送另一个response。
建议用pipe,最快的可能是用request+pipe,试试:
你这个问题  我今天刚写完
你这个回答有什么意义?
你们这些回答有卵用
CNode 社区为国内最专业的 Node.js 开源技术社区,致力于 Node.js 的技术研究。
服务器赞助商为
,存储赞助商为
,由提供应用性能服务。
新手搭建 Node.js 服务器,推荐使用无需备案的

我要回帖

更多关于 oracle 发送http请求 的文章

 

随机推荐