作为浏览器,要向服务器发送的header要有哪些?

cx2889 2012-11-22 10:28:27
我用socket连接,header只是发送了host和accept,当然用的是get,但是连接Apache-Coyote/1.1,就会返回505,然而连接百度还是没问题的!!
...全文
386 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Gloveing 2012-11-26
  • 打赏
  • 举报
回复
引用 10 楼 cxwithyxy 的回复:
引用 6 楼 agoago_2009 的回复:你用的getNet等等是socketNet类的成员函数么?没见self 百度了"505http"之后终于找到结果了............ stream="GET "+s.remainUrl+" HTTP/1.1 \r\n" 这里的那个" HTTP/1.1 \r\n"要把"1.1"后面的空格去掉... 就是写成 " ……
HTTP/1.1 \r\n 这么小的细节,都引起大麻烦,受教了
cx2889 2012-11-25
  • 打赏
  • 举报
回复
引用 6 楼 agoago_2009 的回复:
你用的getNet等等是socketNet类的成员函数么?没见self
百度了"505http"之后终于找到结果了............ stream="GET "+s.remainUrl+" HTTP/1.1 \r\n" 这里的那个" HTTP/1.1 \r\n"要把"1.1"后面的空格去掉... 就是写成 " HTTP/1.1\r\n" 这样就好了..... 只能说是服务器"Apache-Coyote/1.1"太严格了
cx2889 2012-11-25
  • 打赏
  • 举报
回复
引用 8 楼 crifan 的回复:
需要你自己去(用工具分析)搞懂,除了host和accept之外,还需传递哪些header,比如referer等。 建议: 参考: 【整理】关于抓取网页,分析网页内容,模拟登陆网站的逻辑/流程和注意事项 去了解逻辑。 然后自己参考: 【教程】手把手教你如何利用工具(IE9的F12)去分析模拟登陆网站(百度首页)的内部逻辑过程 用工具抓取你此处涉及的逻辑。 ……
有种撒大网捕小鱼的感觉..... 不过还是谢谢了啊
cx2889 2012-11-23
  • 打赏
  • 举报
回复
引用 6 楼 agoago_2009 的回复:
你用的getNet等等是socketNet类的成员函数么?没见self
getNet已经在socketNet中定义了... 这段程序访问百度还是好好的,访问我的的sinaapp的页面也是好好,唯独到了joycool这个网址就505了.. 说到self..是不是这样写的?
class a:
	c=10
	def b(self):
		print self.c

a1=a()
a1.b()
不过我在socketNet用了s代替了self
Gloveing 2012-11-23
  • 打赏
  • 举报
回复
你用的getNet等等是socketNet类的成员函数么?没见self
crifan 2012-11-23
  • 打赏
  • 举报
回复
需要你自己去(用工具分析)搞懂,除了host和accept之外,还需传递哪些header,比如referer等。 建议: 参考: 【整理】关于抓取网页,分析网页内容,模拟登陆网站的逻辑/流程和注意事项 去了解逻辑。 然后自己参考: 【教程】手把手教你如何利用工具(IE9的F12)去分析模拟登陆网站(百度首页)的内部逻辑过程 用工具抓取你此处涉及的逻辑。 然后参考: 【教程】抓取网并提取网页中所需要的信息 之 Python版 写出你自己的相关代码实现。
cx2889 2012-11-22
  • 打赏
  • 举报
回复
引用 1 楼 agoago_2009 的回复:
505 HTTP Version Not Supported 服务器不支持请求中所指明的HTTP版本。(HTTP 1.1新) ================================================
至于1.1还是1.0我都用过了..还是不行啊
Gloveing 2012-11-22
  • 打赏
  • 举报
回复
505 HTTP Version Not Supported 服务器不支持请求中所指明的HTTP版本。(HTTP 1.1新) ================================================
cx2889 2012-11-22
  • 打赏
  • 举报
回复
引用 3 楼 agoago_2009 的回复:
引用 2 楼 cxwithyxy 的回复:引用 1 楼 agoago_2009 的回复:505 HTTP Version Not Supported 服务器不支持请求中所指明的HTTP版本。(HTTP 1.1新) ================================================ 至于1.1还是1.0我都用过了..还是不行啊 你使用浏览……
import socket,thread,e32
class socketNet:
  mainUrl=""
  remainUrl=""
  socketObj=None
  header=""
  def get_main(s,x):
    num=x.count("/")
    if(num>=3):
      a=x.find("/",7)
      s.mainUrl= x[7:a]
      s.remainUrl="/"+x[a+1:]
    else:
      s.mainUrl=x[7:]
      s.remainUrl="/"
    return s
  def connect(s,_url):
    s.get_main(_url)
    s.socketObj=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.socketObj.connect((s.mainUrl, 80))
    return s
  def send(s,_content=None):
    if(not _content):
      stream="GET "+s.remainUrl+" HTTP/1.1 \r\n"
      stream+="Accept: */*\r\n"
      stream+="host: "+s.mainUrl+"\r\n"
      stream+="Connection: close\r\n"
      stream+="\r\n"
      print stream
      s.socketObj.send(stream)
    else:
      stream="POST "+s.remainUrl+" HTTP/1.1 \r\n"
      stream+="Accept: */*\r\n"
      stream+="host: "+s.mainUrl+"\r\n"
      stream+="Content-Type: application/x-www-form-urlencoded\r\n"
      stream+="Content-Length: "+str(len(_content))+"\r\n"
      stream+="Connection: close\r\n"
      stream+="\r\n"
      stream+=_content+"\r\n"

      print stream
      s.socketObj.send(stream)
    return s
  def getIntegral(s,x):
    a=int(x)
    if(a<x):
      a+=1
    return a
  def getContentLength(s):
    x=s.header
    l=len("Content-Length: ")
    a=x.find("Content-Length: ")
    if(a!=-1):
      b=x.find("\r\n",a+l)
      return  int(x[a+l:b])
    else:
      return 1024*100
  def getData(s):
    data=""
    dataPath=1024
    data+=s.socketObj.recv(dataPath)
    rnPosition=data.find("\r\n\r\n")
    #print data,rnPosition
    s.header=data[0:rnPosition+4]
    #print s.header
    """pathNum=s.getIntegral(float(s.getContentLength())/float(dataPath))
    for i in range(pathNum+1):
      data+=s.socketObj.recv(dataPath)    
    """
    while True:
      d=s.socketObj.recv(dataPath)
      if(d!=""):
        data+=d
      else:
        break    
    #s.socketObj.shutdown()
    return data[rnPosition+4:]
  def getNet(s,_url,_content=None):
    s.connect(_url)
    s.send(_content)
    return s.getData()

a=socketNet()
print a.getNet("http://ad.joycool.net").decode("utf-8")
print a.header

cx2889 2012-11-22
  • 打赏
  • 举报
回复
引用 3 楼 agoago_2009 的回复:
引用 2 楼 cxwithyxy 的回复:引用 1 楼 agoago_2009 的回复:505 HTTP Version Not Supported 服务器不支持请求中所指明的HTTP版本。(HTTP 1.1新)
================================================
至于1.1还是1.0我都用过了..还是不行啊
你使用浏览……


我发送的header和接收到的所有内容都在截图里了...
Gloveing 2012-11-22
  • 打赏
  • 举报
回复
引用 2 楼 cxwithyxy 的回复:
引用 1 楼 agoago_2009 的回复:505 HTTP Version Not Supported 服务器不支持请求中所指明的HTTP版本。(HTTP 1.1新) ================================================ 至于1.1还是1.0我都用过了..还是不行啊
你使用浏览器可以打开么? 贴出你的代码看看呢?

37,743

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧