1

我想要实现的是从通过 php 脚本(动态)生成图像的 url 获取二进制数据(图像),并使用 sqlalchemy 将该数据保存到数据库中。当我尝试使用 python 或 ipython 解释器来实现这一点时,会返回数据,但在脚本中使用相同的代码时,数据是一个空白字符串。

使用解释器:

>>>import urllib
>>>link = 'http://www.example.com/getImage.php?e=23f4904fhsdajf0xns3erre32q886heipxd8c447gf8gs9b9d'
>>>image = urllib.urlopen(link).read()
>>>image

返回以下二进制数据:

>>>'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x01\x00H\x00H\x00\x00\xff\xe1\x00\x18Exif\x00\x00II*\x00\x08\ x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xe1\x03) http://ns.adobe.com/xap/1.0/\x00 \xff\xdb\x00C\x00\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01 \x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x02\x02\x01\x01\x02\x01\x01\x01\x02 \x02\x02\x02\x02\x02\x02\x02\x02\x01\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\xff\xc0\x00\x0b\x08\x00 \x16\x01,\x01\x01\x11\x00\xff\xc4\x00\x1b\x00\x01\x00\x03\x01\x01\x01\x01\x00\x00\x00\x00\x00\x00\ x00\x00\x00\x00\x06\x07\x08\x05\t\n\x03\xff\xc4\x00$\x10\x00\x02\x02\x03\x01\x01\x01\x00\x02\x02 \x03\x00\x00\x00\x00\x00\x05\x06\x04\x07\x02\x03\x08\x00\x01\t\n\x14\x12\x17\x13\x15\x16\xff\xda \x00\x08\x01\x01\x00\x00?\x00\xfb\xf8\xf3\xcf<\xf7$\xf9\xf0J\xa0\x8d44\x1a\x12\xb6\xb2\xb6$\x89\xf6&#\xe4a\x87\x04\x04\x10x{\x88\x974h\xb9\x1d\xda\xe3\x8b\x13\x14|y\x1b\xe4\xc9\xdf\xb3^\x9d\x1atg\xb7nx\ xe1\x8eY|\xfc\xd6\xd9\x17\\x97@7\xa8\x1f\n\xd6\xa4\xd6\x14S"\xbbB\xd9X\'WY\x17N\xc1\xd0P!\xf0\x06 \xc5\xef\xdb\x18\xc0Y\x83%F\x91\x16T}\xbb4H\xd1\'^\xed;3\xd7\x9e9}\xedz\x16\xc3d\xd7j\'\xc0*\xb5 \xbf%\xac45\xc4\x92A]m\x85\xa4\x18S\xec\x90!6!\xa1L\x9a\x009)\xfa\xa4\x18\x89\xa9\xea\xd4\xac\x02\ xed\xdb\x1f^\xcc5\x96\xb1\xc0\x8e\xcb/\x93\x0c\x0f\xd3"i\xec\xfe\xb7\xd6\\xb0\xe5g\xce\xa4\x94:我\xec\xfe\xb7\xd6\\xb0\xe5g\xce\xa4\x94:我\xec\xfe\xb7\xd6\\xb0\xe5g\xce\xa4\x94:\x9f\xda\xaeq\x9b\x88\xc6%Q-\xdc\xb5\xd1\xcb<|\x81\x18\xe5\x99m\x13\x90E\xb1\xed+\x13t\0\xcf\xec\ x8cvD\xc7-\x1f1\xfb\xf7o\xcc~|\xfb\xed\x01\xe7\xa3\xed\x8d\x8a\xa8J\xac\xcfOL\xcb\xe9i)k\xe6[\x1c\[\ x0c\x8e\USU\\x1d$\xc3\x0b33\t\x89:b\x01 \x80"\x1c\xc9Sf\xca\xdd\xaa4X\xd1vo\xdf\xb3\rXe\x97\xc2\xcbb\xab \xa0\xe9&\x13\x99\x97\xdb\x04ClS\x98Qd\xc8\xe3\xc3\xa2\xb5!5\x19EzY\x938\\\x9d\xba\xb40\x05v\\a\x0cZ\x16Y|\x928\xa8)\xa3\xe6k\xd3..\xfd8H<\xf3\xcf<\xf3\xcf<\xf3\xcf<\xf3\xcf<\xf3\xcf<\xf3\xdf7[\xa2\xf4\xe1\xfe\xe6^\x85\x96\xdf\xd0$\x94;\x0b\xb0\xba\xc6\x9a\xbc6m+\xdb\xcdJ\xa09\xe1\xb2\x89\xe9\xd5Z>\xc3Ka\x0e\x00=5U\xa0ej\x8f\xa0\xcb\xa9\x92G\x10U\xa9gIq\xbb]_\xa1\x92\xd0\xcd\xaag\x01\x97/\xd3\xd7\xde}\xf93\x97\xbd\xeac\x81\xae\x1a\x0f\x94\xef!\xf0kn\x91\xb1K\xcd\xa69\xd2\xa5\xb5\x87]\xbdOWQ\\xf1s\xa0\xd8,X \xd8\x1d\x90\xe4\x07\x1cL \xb3Be#[!\x863\nI\xa1\x18l\x156\xa5n\xae?B\xe6\xd2/2\x03[\xdd\xf0\xeb\xf1 \x1f\x8a\xbf]\xad~w$\x99^\xf6\x174\x1e\'s\xa1\xc4\xfc\xfd\x93\xc6IGP,n\x8f\xb1\xac\xbb\x10\xec \xab\x14\x7fE\x10K\x11j\x9f\xda\xdc\xc8<\x93\x18L\x16\xb3S\xd7\xba\x1c\xedQ\xd3\xae?\xa00\xfa"\xf0\xae9\ xdc\x1fM\xc8{\x99\xd9\xb6\x85\xa1D1MV\xb4$\xf3&\x8a\x97w\xe0\x13\xaaUL\xb6~\xc2\x9f\x0f\xeaTj\xdbg\xe9\x12\xf6 \xb9RVfL\xf9\x0e3\xbe1\r\x92\x1f\x1c\x91\x80\xf3H\xe3\x01\xaa=\xb7\xf2XB\xf2:C\xf4\x18\xb5A\x87\xc5\xe9W\ x8a\x98^\x18\xfde\xae?\xbc\xf32\x19\xed\x81\x80\xb3\xb4?\xfe\x8b<]#\x03G\x9b\x16v\xa9\xf3y\xb0N\xe5- D\xc8\x02\xde\xc1\x99\x15|%G\xf9\xe8\x8d\xc7\n\xcc\xb7\xff\x00\x14\xbaR\x90;Su\x7f\xfb\xae\xcf \xe1n\xff\x00\x98\x84\x8c\xc5.\xfb\xb3m\x03[R3q\tT\xa9\x96\xb2\xe5\xa6\x85g&y\xaa+]q\xb5Q-\xda4w\xf6e\x89s\x01\xb4\x0b>HC\x9f\xdf\xb8\ xaa\xcd\xfb\xde\xc8\x17!\xbf\xbc\xbe?\xbb\xf4=A\xb7\xbbf\xa5\n\x1e\xe17\xdb\xb7\xe5y!J7)\xf5Z\xdf \x19\xb7\x1aj~\x1b\xa6\x9a\x81V\xcf\xe8e\xceb"4\xa8\xb8\x0c\x8dP!\xb0F\xddgX\x98\x92\xfa\xdf\x89\r\x83 \x91g%\xfeq\xb0Y\xf9\xd2/\xea\x9c\xd0\xea7\xdf\xe6[\xb3dn\x88\x1b\xd3L\x16\xa9\x15\xf4\xee\xc1\xa8\x99\ xbb,UB\x9bi@\xddh\xb7\x0f\xdd\xcf\xc1\x98\xb5\xbb\x84\x0b\xa2z\x11\xe8\x93w\x07B\x1f/\x19,q$\xe1\x0e \x8d\xa9z\n\xfc\x1b\xc96\x85\x97T\xf6\xb9\x91\xa9]\x03\xdfoly\xc0[\xea\x11\xb6\xeae+\xbb\xf9&~i\xd9\x95pi \x83+\x8cu\xb5i\xc2/\x11\xd7m\xec\x08\xa0\xe2c\xb6^\x85\xda\x929\xe4\xb8\x7f3U\x178u\xc8\xfe\xef\xd4[T\xfb \x81%\xa9\xd2\xfb\xddY\xf0\x11@<\xe9e3\x88m{"\xc5eQ\xfd3\xd7\x15\xad\xebu\xd8\xb9\xcc\x1aOi\x06\xdb2\xb7\ xfc\xa7\x95]\xc5eQ\xfd3\xd7\x15\xad\xebu\xd8\xb9\xcc\x1aOi\x06\xdb2\xb7\xfc\xa7\x95]4\xff\x00\xf9H5\x00\xad\x8e\xcd\xb8fq%\xed\xcf\xfeJ\xc6\xc4\xe6.\x8d\xe8\x1dCQi\xfa\xbc\x81\n\xd4\xd3gJ\xe3\xcaV\xfdW\xd74\xc4\x0eG\xadBnkZ\x1f\xf9\xfd\xd1t\xad\x02\xa9sc\xf0\x1a\xadMD\x912l\xcf\xd0*\x1fZ\x8cZA\x07\xee\xca) s4\xb1\x8b\xd3+/\xf6\xac\x1e\xff\x00\xe5\xc1nn\xbd\x8f\x06\xcas\xfd6\xed\xf4k0\\\xb6K\xc27\x16\xb6\xf3:\xef+w\xcb7+(\xa5\xc2\xdb7\x1a\xd8\xf9H)\tT\xf1\x12p\x17\xf1\xdcj+\x9a\xa9\xc9n\xda\xb5\x98\x82\x0b=T}\x01N\xf7\x02\xdaG5;\x1ep\xfd\x19"\xfa\x1f\x9e\xff\x00\x8f%\x88\xe0\x1e\xc0\xb6z\x99\x8a\x0c\xbb\xb6\xef\xeb\xc6J\xd3\xf4\xe0E\x80\x96\xd4{tS\x1b\x03s\x15\xad\xcf+eb\xed\x82\x95\x12fm\xe4\x87\n/?y\xcd\xf5\xbc\x03]\xe3\x0e\xbb\xe8\xcc\xd3\x85~\ x8f\x8cg\xb3?&\xff\x00H2\xdc\xb8\xef\xa7\xbc,\x87\xe4\xee\xe8\x10\x1e\xa6\xe7 \xe1,Wu\x91J!n\xac\x06\xcf\xbb"/\xc8\xa5\x15\xd5\x12\xa7\x92\x81\xaa\x1a\xe9\x06I9\xad|\x89\xb9"cn*s\xe8\x8a\xcc\x8aG^\'\xa2\x0e\xfdC\xee\xabK\xabr\xa4k\xce\x87X\xb6\x8a\xf2]\xd9\xdd\x9f\xa6\xec\xd5Izy\x9a\xa1\x0b\xa1\xb1\x9b\x026\x9e}6wE{"C>\x8a\xe9\xda!\xcf\x9a\xf5\x83e\x19.\x7f%\x9b\xff\x00m\xfd\xc5_\x96\xf6?\xaf\x18s\xa6 <\xc5/\x1e^\xff\x00Y\xed\xe9\xcd\xdd\x17\x9d\xe9\x8d\xe3{\xe2koH\xe7\xccZp9\x8b\x0et\​​xc7\xced\xcd\x13\x0b \x8b\x1f\xfal \xec7\x85\x89\x96m\xd8\x9c\xcf\xed}W\xd1\xbd\xd5f\xd9uT\x9e\xa3t\xed\x95\xe6\x86\xfe\xc9\xa8 \xaa\xbe\x86\x8dS\xdd\x9d\tZS\xe3i\xcd_\x82u\xd5\x93l\x1cE\xc2\xaeg\x1e\r:\xbb\x91\xfaJ\xa3\xb4v-\xc0~\ xc3\xd7\xa9\xbeQ%\xc1\xc5\xa3O8b\x11\x0fh\xb8$\x85\xb4[\x85\xf8\xb8\xad\xfb\xad\xcbM\xecO\x93y\xd0\x85\xd5 \xa6\xc5\x1aH5\x83\xaa\xda\x9bO\xa7I\xb1\xf5\xbd\x873\x17D\xc1NX\xb8\xec3\xf0\xa4izt\xc9\xd1;\xe6\xfd[\xf5k\xdb \x86X|\xd6>y\xe7\x9ey\xe7\x9ey\xe7\x9ey\xe7\x9ey\xe7\x9ey\xe7\x9ey\xe7\x9e\xaa\xeazV\xb8\xa4E\xb4\x89\xaeB\ x91\x19\xa9\xe1\xe9\x8e\xcbq u\xb1\xc1\xe9\x8d\xa1\xe1\xab(\x98\x17m\xcb\x0f\x99g\xf3/\xbf>}\xf4yw\x8ay\xa5V\xfb\x9f\xd3\x00\xeb\xe9\xf1m\xd9\xc4\xda\x0f\xea\x9f"\xc2\xb3\x89#\x82ky\x13\x14\x0b\ xd3\xcau:Q\xcfrj-\x84t,L"\x9ba\x0c\x02\x01\xb2\xfa7o\xd6F|\x9ceI\xf9\xb7Ty\xe7\x9ey\xe7\x9ey\xe7\x9ey\xe7\x9ey \xe7\x9ey\xe7\x9ey\xef\xff\xd9'

现在在脚本中使用相同的代码,如下所示:

def get_image(link):
    print link #Debug: Check if link has been passed
    image = urllib.urlopen(link).read()
    print type(image), image
    return image

第一个打印语句返回:

http://www.example.com/getImage.php?e=23f4904fhsdajf0xns3erre32q886heipxd8c447gf8gs9b9d

第二个:

类型,

为什么相同的代码会产生不同的结果?任何人都可以在这里想到一个可能的原因吗?

4

1 回答 1

2

虽然我不知道为什么从脚本运行与从解释器运行时会得到不同的结果,但我首先要做的是放弃 urrlib 以支持 Requests 库:http ://docs.python-requests.org /en/latest/user/quickstart/#response-content我一直在从脚本应用程序中获取许多不同的内容,到目前为止从未遇到过问题。

于 2013-02-02T09:20:17.920 回答