在Python中请求URL

时间:2012-11-18 21:32:04

标签: python curl solr request

要触发更新,您必须在浏览器中访问网址。这个脚本是在shell中完成的:

#!/bin/bash
# Bash to initiate Solr Delta Import Handler

# Setup Variables
hostName=localhost
portNum=8080
SOLRPATH=/solr
SOLR='delta-import&clean=false'
STATUS='dataimport?command=status'
urlCmd='http://${hostName}:${portNum}${SOLRPATH}/dataimport?command=${SOLRCMD}"

# Operations
curl $URLCMD 

我试图用Python写这个,这是我得到了多远:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

# Setup Variables
hostName='localhost'
portNum='8080'
SOLRPATH='/solr'
SOLRCMD='delta-import&clean=false'
STATUSCMD='dataimport?command=status'
urlCmd='http://${hostName}:${portNum}${SOLRPATH}/dataimport?command=${SOLRCMD}'

# Alternative to Curl {URLCMD}

基本上我有两个问题:

  1. 到目前为止我的python代码是否正常?
  2. python中Curl的简单替代是什么?该事件通常只是通过访问URL来触发,但我不知道如何在Python中完成此操作。

2 个答案:

答案 0 :(得分:3)

首先,在Python中使用以下一种字符串格式:

urlCmd='http://{0}:{1}{2}/dataimport?command={3}'.format(hostName,portnum, SOLRPATH, SOLRCMD)
#or
urlCmd='http://%s:%s%s/dataimport?command=%s' % (hostName,portnum, SOLRPATH, SOLRCMD)

虽然python中有pycurl使用libcurl,但如果希望脚本保持可移植性,则应使用urllib2之类的内置模块来访问您生成的URL。

import urllib2
req = urllib2.urlopen(urlCmd)

现在您可以对您的请求做几件事:

req.close      req.fileno     req.getcode    req.headers    req.msg  
req.read       req.readlines  req.code       req.fp         req.geturl   
req.info       req.next       req.readline   req.url

虽然大部分方法都是不言自明的,但请参阅urllib2 docs以获取有关其作用的详细说明。

答案 1 :(得分:2)

  
      
  1. 到目前为止我的python代码是否正常?
  2.   

不,不是。请看一下Python中的字符串格式。

试试这个:

...
urlCmd='http://%s:%d%s/dataimport?command=%s' % (hostName, portNum, SOLRPATH, SOLRCMD)
  
      
  1. python中Curl的简单替代是什么?该事件通常只是通过访问URL来触发,但我不知道如何在Python中完成此操作。
  2.   

尝试urllib模块:

import urllib    
urllib.urlopen(url)