RUL不能通过验证码不正确 请确认URL是否正确

《 认证申请时说hsurl或merurl项不能为空 》 这是开通快捷支显示的 请求高手解决!谢谢
《 认证申请时说hsurl或merurl项不能为空 》 这是开通快捷支显示的 请求高手解决!谢谢
不区分大小写匿名
我也是这样呢。工商的卡。
求解。。。
貌似工商的借记卡开不了?
我也在求解,不行打95588问问把
因为使用了工行不支持的浏览器,建议用ie,使用前设置internet选项,安全选项卡,去掉启用保护模式,重启ie即可,就好啦。
相关知识等待您来回答
电脑常识领域专家
& &SOGOU - 京ICP证050897号主题 : 哪位知道怎么判断url是否能打开,不是判断url本身是否正确,是判断url的内容是否正确。准备弄个备用地址..
级别: 新手上路
可可豆: 26 CB
威望: 26 点
在线时间: 85(时)
发自: Web Page
来源于&&分类
哪位知道怎么判断url是否能打开,不是判断url本身是否正确,是判断url的内容是否正确。准备弄个备用地址..&&&
哪位知道怎么判断url是否能打开,不是判断url本身是否正确,是判断url的内容是否正确。准备弄个备用地址.
级别: 侠客
UID: 393483
可可豆: 401 CB
威望: 329 点
在线时间: 849(时)
发自: Web Page
Re:哪位知道怎么判断url是否能打开,不是判断url本身是否正确,是判断url的内容是否正确。准备弄个备用 ..
这个可以先解析一个url&&&&在判断返回的东西&&比如一个字典的key&&或者 数组的长度 如果不一致立即清空 重新请求备用地址 。前提还是要你知道正确的格式 大不了多判断些东西
级别: 新手上路
可可豆: 26 CB
威望: 26 点
在线时间: 85(时)
发自: Web Page
回 1楼(mnnnnni) 的帖子
立即清空??
级别: 侠客
UID: 393483
可可豆: 401 CB
威望: 329 点
在线时间: 849(时)
发自: Web Page
回 2楼() 的帖子
对&&就是清空data的事情&&一旦发生错误 我相信也展示不了到页面上 立即换个 url 再解析
级别: 新手上路
可可豆: 26 CB
威望: 26 点
在线时间: 85(时)
发自: Web Page
Re:哪位知道怎么判断url是否能打开,不是判断url本身是否正确,是判断url的内容是否正确。准备弄个备用 ..
感谢,我好像想到了什么
级别: 圣骑士
可可豆: 627 CB
威望: 629 点
在线时间: 1032(时)
发自: Web Page
Re:哪位知道怎么判断url是否能打开,不是判断url本身是否正确,是判断url的内容是否正确。准备弄个备用 ..
发个head请求
关注本帖(如果有新回复会站内信通知您)
9*6-8 正确答案:46
发帖、回帖都会得到可观的积分奖励。
按"Ctrl+Enter"直接提交
关注CocoaChina
关注微信 每日推荐
扫一扫 浏览移动版Javascript验证用户输入URL地址是否为空及格式是否正确-javascript编程
&&&&【提要】本篇《Javascript验证用户输入URL地址是否为空及格式是否正确-javascript编程》特别为需要格式编程学习的朋友收集整理的,仅供参考。内容如下:
&&&&复制代码 代码如下:&&&&&script type="text/javascript"&&&&&function checkUrl() {&&&&var url = document.getElementById('url').&&&&if (url==''){&&&&alert('URL 地址不能为空');&&&&&&&&} else if (!isURL(url)) {&&&&alert('URL 的格式应该是 http://www.jb51.net');&&&&&&&&} else {&&&&&&&&}&&&&&&&&}&&&&function isURL(str)&&&&{&&&&//varreg=/[0-9a-zA-z]+.(html|htm|shtml|jsp|asp|php|com|cn||org)$/;&&&&//必须包含.(最后面一个.前面最少有一个字符)且.后面最少有一个单词字符,最后一个字符必须为单词字符或/&&&&varreg=/w+.(w+|w+/)$/;&&&&varisurl=reg.test(str);//test(str)方法是js正确表达式内置的对象可以直接调用&&&&&&&&}&&&&&/script&&&&&复制代码 代码如下:&&&&&form action="" method="post" onsubmit="checkUrl();"&&&&&URL:&&&&&input type="text" name="url" id="url" value="http://www.jb51.net" onfocus="this.value=''"/&&&&&&br /&&br /&&&&&&input type="submit" value="获取地址" name="get"/&&&&&&input type="submit" value="下载" name="download"/&&&&&&/form&&&&&PHP检测URL地址有效性&&&&代码如下&&&&复制代码 代码如下:&&&&&&&&&function is_url($str){&&&&return preg_match("/^http://[A-Za-z0-9]+.[A-Za-z0-9]+[/=%-&_~`@[]':+!]*([^&&"])*$/", $str);&&&&}&&&&&&&&&如果要尝试是否可以正常方法我们可使用file_get_contents()函数来验证就可以了。&&&&……
特别声明:Javascript做url检验,通常是使用正则表达式来判定,其格式是否正确,例如:
/^https?:\/\//.test(url);
当然还有更好的检测方法比如基于RFC 3986, RFC 3966, RFC 4694, RFC 4759, RFC 4904等标准的进行验证的valid-url库。
不过个根据格式进行验证当然不能确定该url是否存在啦,所以就有了url-valid,我们基于HTTP请求进行验证。
接口设计实际上我们只需要一个函数传入一个url地址,并回调返回该链接是否可用。
但请求容易产生未知错误,所以我们在回调函数传入一个error参数,如果不为空,则有错误产生。
我们可能还希望能够得到网页的相关数据,未来用在页面的信息提取上。
尽可能链式操作吧。
所以最后使用上大概是这样的:
valid(url)
& .on('check', function (err, status) {
&&& if (err)
&&& status ?
&&&&& console.log('url是可用的') :
&&&&& console.log('url是不可用的');
& .on('data', function (err, data) {
&&& console.log(data);
& .on('end', function (err, data) {
&&& console.log('请求结束');
HTTP GET 还是 HTTP HEAD
本来我们想利用HTTP HEAD请求来实现的,因为HEAD请求只会返回头信息,这可以减少请求时间,但是HEAD请求,不一定所有链接都会支持。
所以最后我们使用HTTP GET方式,在得到正确的statusCode后立刻abort掉请求。
处理301-303因为301到303都是重定向状态所以,我们需要继续检查对应Location是否依然存在。
利用process.nextTick异步执行为了在注册监听后,再执行代码,我们使用process.nextTick来一步操作。
&* MIT Licensed
module.exports = (function () {
& 'use strict';
& var http = require('http')
&&& , https = require('https')
&&& , EventEmitter = require('events').EventEmitter
&&& , URL = require('url')
&&& , urlReg = /^(https?):\/\//;
&& * Valid
&& * @class
& function Valid(url, callback) {
&&& var that =
&&& this.url =
&&& this.emitter = new EventEmitter();
&&& process.nextTick(function () {
&&&&& that.get(url);
&&& this.fetch =
&&& callback && this.emitter.on('check', callback);
& Valid.prototype = {
&&& constructor: Valid,
&&&& * get
&&&& * @param {String} url
&&& get: function (url) {
&&&&& var match = url.match(urlReg)
&&&&&&& , that =
&&&&& if (match) {
&&&&&&& var httpLib = (match[1].toLowerCase() === 'http') ? http : https
&&&&&&&&& , opts = URL.parse(url)
&&&&&&&&& ,
&&&&&&& opts.agent =
&&&&&&& opts.method = 'GET';
&&&&&&& req = httpLib.request(opts, function (res) {
&&&&&&&&& var statusCode = res.statusC
&&&&&&&&& if (statusCode === 200) {
&&&&&&&&&&& that.emitter.emit('check', null, true);
&&&&&&&&&&& that.fetch ?
&&&&&&&&&&&&& (res.on('data', function (data) {
&&&&&&&&&&&&&&& that.emitter.emit('data', null, data);
&&&&&&&&&&&&& }) && res.on('end', function () {
&&&&&&&&&&&&&&& that.emitter.emit('end');
&&&&&&&&&&&&& })) :
&&&&&&&&&&&&& (req.abort() || that.emitter.emit('end'));
&&&&&&&&& } else if (300 & statusCode && statusCode & 304) {
&&&&&&&&&&& req.abort();
&&&&&&&&&&& var emitter = that.emitter
&&&&&&&&&&&&& , valid = one(URL.resolve(url, res.headers.location), function (err, valid) {
&&&&&&&&&&&&&&& emitter.emit('check', err, valid);
&&&&&&&&&&&&& });
&&&&&&&&&&& that.fetch && valid.on('data', function (err, data) {
&&&&&&&&&&&&& emitter.emit('data', err, data);
&&&&&&&&&&& });
&&&&&&&&&&& valid.on('error', function (err) {
&&&&&&&&&&&&& that.emitter.emit('error', err);
&&&&&&&&&&& });
&&&&&&&&&&& valid.on('end', function () {
&&&&&&&&&&&&& that.emitter.emit('end');
&&&&&&&&&&& });
&&&&&&&&& } else {
&&&&&&&&&&& that.emitter.emit('check', null, false);
&&&&&&&&& }
&&&&&&&&& res.on('error', function (err) {
&&&&&&&&&&& req.abort();
&&&&&&&&&&& that.emitter.emit('data', err);
&&&&&&&&& });
&&&&&&& });
&&&&&&& req.on('error', function (err) {
&&&&&&&&& req.abort();
&&&&&&&&& return that.emitter.emit('check', null, false);
&&&&&&& });
&&&&&&& req.end();
&&&&& } else {
&&&&&&& return that.emitter.emit('check', null, false);
&&&& * @param {Stirng} event
&&&& * @param {Function} callback
&&& on: function (event, callback) {
&&&&& (event === 'data') && (this.fetch = true);
&&&&& this.emitter.on(event, callback);
&&&& * destroy
&&& destroy: function () {
&&&&& this.emitter.removeAllListeners();
&&&&& this.url =
&&&&& this.emitter =
&&&&& this.fetch =
&&&& * removeAllListeners
&&&& * @param
&&& removeAllListeners: function (event) {
&&&&& event ?
&&&&&&& this.emitter.removeAllListeners(event) :
&&&&&&& this.emitter.removeAllListeners();
&&&& * listeners
&&&& * @param
&&& listeners: function (event) {
&&&&& if (event) {
&&&&&&& return this.emitter.listeners(event);
&&&&& } else {
&&&&&&& var res = []
&&&&&&&&& , that = this
&&&&&&&&& , _push = Array.prototype.
&&&&&&& Object.keys(this.emitter._events).forEach(function (key) {
&&&&&&&&& _push.apply(res, that.emitter.listeners(key));
&&&&&&& });
&& * @param {String} url
&& * @param {Function} callback
&& * @return {Valid}
& function one(url, callback) {
&&& return (new Valid(url, callback));
& one.one =
把Mysql Module装到NodeJS中
$npm install Mysql
JS脚本 mysqlTest.js Js代码
// mysqlTest.js //加载mysql Module var Client = require('mysql').Client, client = new Client(),      //要创建的
首先我们利用NodeJs先构建一个基本的服务器。 index.js
var requestHandler = require(&./requestHandler&); var server = require(&./server&); var route = { &/hello&: requestHandler.he
上次介绍了怎么利用NodeJS + PhantomJS进行截图,但由于对每次截图操作,都启用了一个PhantomJS进程,所以并发量上去后,效率堪忧,所以我们重写了所有代码,并将其独立成为一个模块,方便调用。如何改进?控制线程数,以及单线程处理url数量。使用Standard Output & WebSocket 进行通讯。添加缓存机制,目前使用Javascript Object进行。对外
何为forever forever可以看做是一个nodejs的守护进程,能够启动,停止,重启我们的app应用。官方的说明是说:
A simple CLI tool for ensuring that a given script runs continuously (i.e. forever). // 一个用来持续(或者说永远)运行一个给定脚本的简单的命令行工具
前言 Nodejs最大的亮点就在于事件驱动, 非阻塞I/O 模型,这使得Nodejs具有很强的并发处理能力,非常适合编写网络应用。在Nodejs中大部分的I/O操作几乎都是异步的,也就是我们处理I/O的操作结果基本上都需要在回调函数中处理,比如下面的这个读取文件内容的函数:
fs.readFile('/etc/passwd', function (err, data) {
NodeJS子进程简介 NodeJS子进程提供了与系统交互的重要接口,其主要API有: 标准输入、标准输出及标准错误输出的接口。
NodeJS子进程简介
NodeJS 子进程提供了与系统交互的重要接口,其主要 API 有:
标准输入、标准输出及标准错误输出的接口 child.stdin 获取标准输入 child.stdout 获取标准输出 child.stderr 获取标准错误输出 获取子
这第一篇就谈谈NodeJs的一些编程细节吧。 1、遍历数组
for (var i=0, l=arr. i&l; i++)
这样写的一个好处就是让每次循环少一步获取数组对象长度的操作,数组长度越长,价值越明显。 2、判断变量的真假
if (a) {...} //a='', a='0', a=[]
今天从GIT源码库中下载了promise.js,发现该源码是基于Web前端JavaScript写的,并不能直接用于nodejs。还好代码不是很多,也不是很复杂。经过分析整合,将其实现为nodejs的一个框架,代码如下:
(function(){ /** * Copyright
(c) Pierre Duquesne &stackp@online.fr& * sc
NodeJs和 mongodb初识
NodeJS: 提供javascirpt实现服务器端功能的引擎(中间件)。 NodeJS中文文档:http://cnodejs.org/cman/
mongodb:NoSQL 数据库实现。 mongodb /view/a34f671dfc4ffe.html?f
一、nodejs应用普通部署方式介绍 终于要把nodejs的应用程序部署上线了, 把源代码通过git复制到目录下面
/root/deploy/movie
然后搞命令:
~ cd /root/deploy/movie node ./app.js
上面的方式,nodejs程序会在当前的console界面中运行,一旦console结束,应用也会停止。我们改一
1) 下载sublime并安装,下载列表:http://www.jb51.net/softs/132432.html 2) 下载sublime的nodejs插件,需是集成Nodejs插件到sublime中,下载地址:/tanepiper/SublimeText-Nodejs 3) 解压zip文件, 并重命名文件夹“Nodejs” 4)&n
模板引擎 Express支持许多模板引擎,常用的有:
haml 的实现Haml
haml.js 接替者,同时也是Express的默认模板引擎Jade
嵌入JavaScript模板EJS
基于CoffeeScript的模板引擎CoffeeKup
的NodeJS版本jQuery模板引擎
视图渲染(view randering) 视图的文件名默认需遵循“&name&.&e
node-yesdb:一个nodejs的bitcask k-v数据库的实现
基于bitcask日志模型的k-v数据库有多个实现,比如豆瓣db, riak里的,nodejs也有一个140代码的简单实现(node-cask),我这里实现的目的是,我需要在nodejs中找到一个简单的, 方便,完全异步的kv存储机制,不需要跨服务器分布式系统,类似于sqlite那样的就好了,基于以上,就用纯nodejs
在mysql中直接进行这样的判断的方法是使用 row_count(), 这一条语句要紧跟着你执行的sql语句后面. 而Nodejs的i/o都是异步的于是这就产生了一个问题, 不太好判断 row_count()到底是哪句sql执行的结果. 粗略的扫了一眼文档, 文档中并没有描述这个问题. 本想函数嵌套来达到同步的效果的, 却无意发现在执行sql对应的异步函数中的参数中有 affected
摘要: 微信,庞大的用户基数,极强的用户粘性,在近两年吸引了无数的开发者注意力。 Nodejs,近两年发展非常快的开发工具,尤其适合构建移动后台。本文就以笔者自己开发的实例,来描述如何基于Nodejs开发属于自己的微信公众号。在这个实例中,主要使用到了express, wechat, mongodb, monk等模块。 前期准备: 1.申请微信公众号,前往 https://mp.weixin.qq
1. 输入 npm config ls -l 可以查看当前的目录设置
代码如下: cli configs long = builtin config C:\Program Files (x86)\nodejs\node_modules\npm\npmrcprefix = &C:\\Users\\sam\\AppData\\Roaming\\npm&
这里只是纯粹的搭建,连环境都没有,还玩什么服务器端js,一切都成了浮云,让我们先搭建一个环境,输入一个“hello world”的页面。
对的,win7下的搭建,你只需一步一步跟着我做,就ok了,不用去了解过多的细节,那不是我们现在要关心的,我们现在首要目的是把环境搭建好,要不然就没有下一步了。
Step 1. 下载 node.js在windows下是要安装在Cygwin下的,去Cygwin
你肯定非常熟悉nodejs模块中的exports对象,你可以用它创建你的模块。例如:(假设这是rocker.js文件)
exports.name = function() { console.log('My name is Lemmy Kilmister'); };
在另一个文件中你这样引用
var rocker = require('./rocke
nodejs发送udp广播还是蛮简单的,我们先写个服务器用于接收广播数据,代码如下:
var dgram = require(&dgram&);
var server = dgram.createSocket(&udp4&); server.on(&error&, function (err) {
在浏览互联网时,我们都知道,通过SSL进行加密是非常重要的。在贝宝(PayPal),安全是我们的首要任务。我们使用端到端的加密,不仅只是我们的公共网站,对于我们的内部服务调用也同样如此。SSL加密技术将在很大程度上影响node.js的性能。我们已经花时间调整我们的对外服务,并充分地利用他们。下面是一些我们发现能显著地提高SSL对外性能的SSL配置调整清单。 SSL密码 开箱即用,Node.js 的
我们知道每个模块对应一个js文件,这篇写一个最简单的模块hello.js, 然后在另一个js文件(main.js)中require自定义的模块。
function hello(name) { console.log('hello, '+ name); } exports.hello =
相信对于很多关注javascript发展的同学来说,nodejs已经不是一个陌生的词眼。有关nodejs的相关资料网上已经铺天盖地。由于它的高并发特性,造就了其特殊的应用地位。 国内目前关注最高,维护最好的一个关于nodejs的网站应该是odejs.org/ 这里不想谈太多的nodejs的相关信息。只说一下,windows系统下简单nodejs环境配置。 第一
linux下mongodb+nodejs环境搭建
1。安装mongodb,参见前面的文章:/blog/。升级python版本。参见:/blog/。安装nodejs运行环境,参见:/blog/177
前言 在做前后端分离时,第一个关注到的问题就是 渲染,也就是 View 这个层面的工作。 在传统的开发模式中,浏览器端与服务器端是由不同的前后端两个团队开发,但是模版却又在这两者中间的模糊地带。因此模版上面总不可避免的越来越多复杂逻辑,最终难以维护。 而我们选择了NodeJS,作为一个前后端的中间层。试图藉由NodeJS,来疏理 View 层面的工作。 使得前后端分工更明确,让专案更好维护,达成更
事情的起因是这样的, 因为某些原因, 最近在写 Nodejs 的 c++ module, 然后在js这边调用。 网络通信自然离不开ssl, 于是需要链接到Openssl的库。 我们本来的期望是,需要用户安装有Openssl的运行库, 然后我们的c++ module 动态链接到Openssl的so库上来运行。 起初一切看起来还不错,直到我们发现这个openssl的函数不能工作: PKCS
参考nodejs官网发送http post请求的方法,实现了一个模拟post提交的功能。实际使用时报socket hang up错误。 后来发现是请求头设置的问题,发送选项中需要加上headers字段信息(这个估计也和对方的服务器有关,对于不完成的post请求头,可能被丢弃了)。 完整的代码如下(遇到类型问题的同学可以做个参考):
var querystring = req
一、前言 文件上传是一个比较常见的功能,传统的选择方式的上传比较麻烦,需要先点击上传按钮,然后再找到文件的路径,然后上传。给用户体验带来很大问题。html5开始支持拖拽上传的需要的api。nodejs也是一个最近越来越流行的技术,这也是自己第一次接触nodejs,在nodejs开发中,最常用的开发框架之一是expess,它是一个类似mvc模式的框架。结合html5、nodejs express实现
在nodejs中,模块大概可以分为核心模块和文件模块。
核心模块是被编译成二进制代码,引用的时候只需require表示符即可,如(require('net'))。
文件模块,则是指js文件、json文件或者是.node文件。在引用文件模块的时候后要加上文件的路径:/.../.../xxx.js表示绝对路径、./xxx.js表示相对路径(同一文件夹下的xxx.js),../表示上一级目录。如果既
系统环境: Ubuntu 12.04 LTS 64bit 一、通过apt-get安装nodejs ? 失败(可以下面的看源码安装方法):
~ sudo apt-get install nodejs ~ sudo apt-get install npm
~ node -vv0.6.12 ~ npm -v1.1.4
创建工作目录
var express = require(&express&) var app = express(); //注册ejs模板为html页。简单的讲,就是原来以.ejs为后缀的模板页,现在的后缀名可以//是.html了 app.engine('.html', require('ejs').__express); //设置视图模板的默认后缀名为.html,避免了每次r
前言 为了解决传统Web开发模式带来的各种问题,我们进行了许多尝试,但由于前/后端的物理鸿沟,尝试的方案都大同小异。痛定思痛,今天我们重新思考了“前后端”的定义,引入前端同学都熟悉的NodeJS,试图探索一条全新的前后端分离模式。 随着不同终端(Pad/Mobile/PC)的兴起,对开发人员的要求越来越高,纯浏览器端的响应式已经不能满足用户体验的高要求,我们往往需要针对不同的终端开发定制的版本。为
前言 近年来各站点基于 Web 的多终端适配进行得如火如荼,行业间也发展出依赖各种技术的解决方案。有如基于浏览器原生 CSS3 Media Query 的响应式设计、基于云端智能重排的「云适配」方案等。本文则主要探讨在前后端分离基础下的多终端适配方案。 关于前后端分离 关于前后端分离的方案,在《基于NodeJS的前后端分离的思考与实践(一)》中有非常清晰的解释。我们在服务端接口和浏览器之间引入 N
nodejs添加了流的概念,通过流操作文件如行云流水,比早前便利畅快多了。 先来第一个例子,我们建一个stream.js文件,里面内容如下:
var fs = require(&fs&) var a = fs.createReadStream(&source.txt&) a.pipe(fs.createWriteStream(&dest.txt&
StrongLoop是一个基于Nodejs的强大框架,几乎包含了移动开发全栈所需要的所有功能。2013年成立,很少的员工,一个技术驱动,执行力强大的团队。也是在13年我开始接触StrongLoop,当时是为了做nodejs方面的技术选型,看了许多框架,LoopBack是我觉得最酷的一个。我还记得当时是觉得LoopBack的文档太差(主要是跟在线的版本不一样),不知道能活多久所以才放弃了它。时隔一年
诚然,之前处理都是使用内置的process.agrv ,这个能work,但是不好使,于是tj大神给写了一个,my god,完全的高大上: 1、安装
npm install commander
2、option 解析 Options with commander are defined with the .option() method, also serving as
nodejs编译mongodb bson模块出现MSB4025错误
学习使用nodejs,在安装编译mongodb模块时,遇到MSB4025错误
bson.vcxproj(40,46): error MSB4025: 未能加载项目文件。给定编码中的字符无效。 第 41 行,位置 63 查看bson.vcxproj文件后,发现是因为在windows下使用,用户名是中文,
起因 有人提问“如果用nodejs访问sql server?” 找了找资料,发现有两类解决方法,使用第三方nodejs插件:/orenmazor/node-tds、使用ADODB.ConnectionActiveX对象。 参考: /questions/857670/how-to-connect-to-sql-ser
下面是我们使用Node.js时遵循的10个性能规则: 1. 避免使用同步代码 在设计上,Node.js是单线程的。为了能让一个单线程处理许多并发的请求,你可以永远不要让线程等待阻塞,同步或长时间运行的操作。Node.js的一个显著特征是:它从上到下的设计和实现都是为了实现异步。这让它非常适合用于事件型程序。 不幸的是,还是有可能会发生同步/阻塞的调用。例如,许多文件系统操作同时拥有同步和异步的版本
从knockoutjs源码中读到了一个很好的能兼容AMD,commonjs规范的模块定义。看代码
//闭包执行一个立即定义的匿名函数 !function(factory) { //factory是一个函数,下面的koExports就是他的参数 // Support three module loading scenarios if (typeof require === 'function' &
npm的包安装分为本地安装(local)、全局安装(global)两种,从敲的命令行来看,差别只是有没有-g而已,比如:
npm install grunt # 本地安装 npm install -g grunt-cli # 全局安装
下面分别解释。
1. npm install xxx -g 时, 模块将被下载安装到【全局目录】中。
【全局目录】通过 npm conf> Java Http联接中(HttpURLConnection)中使用代理(Proxy)及其验证(Authentication)
Java Http联接中(HttpURLConnection)中使用代理(Proxy)及其验证(Authentication)
guanlinhui & &
发布时间: & &
浏览:188 & &
回复:0 & &
悬赏:0.0希赛币
Java Http连接中(HttpURLConnection)中使用代理(Proxy)及其验证(Authentication)
  转自:
  使用Java的HttpURLConnection类可以实现HttpClient的功能,而不需要依赖任何其他类库。所有有时候大家就直接使用它来完成一些简单(或复杂)的功能。但是你活在伟大的{print G.F.W}后面,如果你需要访问的网站被墙了,那HttpURLConnection类就会出现连接超时的错误。这时候就需要给他设置代理(Proxy)了。
  设置代理(Proxy)可以有两种方式:
  1、通过设置系统属性(System.setPropery(String key, String value)的方式
  首先你可以在这里看到Java支持的属性。我们可以使用其中的http.proxyHost,http.proxyPort这两个属性。顾名思义,就是分别设置代理服务器地址和代理端口。
  view plainprint
//在你发起Http请求之前设置一下属性 
System.setProperty("http.proxyHost", ""); 
System.setProperty("http.proxyPort", "8080"); 
  替换上面的为你的代理服务器地址或IP地址,以及相应的端口为真实端口,Http连接及可以工作了。需要注意的是如果你设置了这些属性,那么所有的Http请求都会通过代理服务器。这些属性是JVM级别的,设置了以后对所有的同类请求都有效。比如上面的是关于http的,还有关于ftp的等等。
  如果你的代理服务器不需要验证,那到此就结束了。但一般都是需要验证的。但是你要是看了上面Java支持的属性列表,你就会发现那里面并没有期望中的
  view plainprint
http.proxyUserName=username 
http.proxyPassword=password 
这两个属性。 这时就需要java.net.Authenticator类来完成一般的Http验证。但是java.net.Authenticator这个类却是个抽象类,我们要使用还需要实例化一下子自己的类。个人觉得这里很不方便。如下:
  view plainprint
public class BasicAuthenticator extends Authenticator { 
  String userN 
  public BasicAuthenticator(String userName, String password) { 
    this.userName = userN 
    this.password = 
   * Called when password authorization is needed. Subclasses should
   * override the default implementation, which returns null.
   * @return The PasswordAuthentication collected from the
   *     user, or null if none is provided.
  @Override 
  protected PasswordAuthentication getPasswordAuthentication() { 
    return new PasswordAuthentication(userName, password.toCharArray()); 
  我们需要覆盖java.net.Authenticator类的getPasswordAuthentication()方法,并返回一个PasswordAuthentication实例。要使他起作用,还需要设置
  view plainprint
Authenticator.setDefault(new BasicAuthenticator(userName, password)); 
  这样就提供了基于Http Basic的验证,接着就可以顺畅的使用需要验证的代理了。
  2、通过java.net.Proxy类。
  这种方式是实例化一个Proxy类提供代理服务器的信息,如端口和地址。
  view plainprint
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(host, port)); 
URLConnection conn = url.openConnection(proxy); 
  使用代理的方式是在打开Http连接的时候同时传递一个Proxy参数。如果需要验证信息的话我们可以添加一个Http头参数来实现。
  view plainprint
//格式如下: 
"Proxy-Authorization"= "Basic Base64.encode(user:password)" 
String headerKey = "Proxy-Authorization"; 
String headerValue = "Basic " + Base64.encode(user+":"+password); 
conn.setRequestProperty(headerKey, headerValue); 
//.......... 
  其中的Base64.encode(user:password)是指把用户名和密码用冒号连接起来之后使用Base64编码后的值作为值的一部分。 
  通过这种方式只影响特定的Http连接,但是需要对代码进行修改。这种方式下是否可以使用Authenticator还未做验证。
本问题标题:
本问题地址:
温馨提示:本问题已经关闭,不能解答。
暂无合适的专家
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&&&增值电信业务经营许可证湘B2-

我要回帖

更多关于 验证码不正确 的文章

 

随机推荐