简体   繁体   中英

Invalid URL message when uploading an image file using urllib2

I am trying to upload an image file to piczasso.com from python. My code is as follows:

import urllib,urllib2

url='http://piczasso.com/api_handler.php'
values = { 'data':open('./imagefile.jpg'),
           'tags':'',
           'size':'None'
}

data = urllib.urlencode(values)
req = urllib2.Request(url,data)
try:
        response = urllib2.urlopen(req).read()
        print response
except urllib2.URLError, e:
        print e.code
        print e.read()

print "done"

However,im getting "Invalid URL!" as the output. I am however able to upload the image using a php page as follows.

<?php

/* 

Simple sample script which uses Piczasso API

Documentation about PicZasso API can be found here: http://www.piczasso.com/api.php

*/



if(isset($_GET["image"])){

    /* API sends output in JSON format */

    $image = json_decode(rawurldecode($_GET["image"]), true);

    /*

    $image array includes information about the image URL and sample links to it:

        $image["direct"] = Image URL

        $image["thumb"] = Thumbnail URL

        $image["image_page"] = Link to image

        $image["bbcode"] = bbcode for forums

        $image["html"] = html code

    Sample table below with image links.

    */

    $image["html"] = str_replace("+", "&nbsp;", htmlentities($image["html"]));

    echo "

    <img src=\"{$image["thumb"]}\" alt=\"\" />

    <table>

        <tr><td>HTML for Websites:</td><td><input type=\"text\" name=\"codes1\" value=\"{$image["html"]}\" /></td></tr>

        <tr><td>IMG Code for Forums:</td><td><input type=\"text\" name=\"codes2\" value=\"{$image["bbcode"]}\" /></td></tr>

        <tr><td>URL for E-Mail:</td><td><input type=\"text\" name=\"codes3\" value=\"{$image["image_page"]}\" /></td></tr>

        <tr><td>Direct Link for Layouts:</td><td><input type=\"text\" name=\"codes4\" value=\"{$image["direct"]}\" /></td></tr>

    </table>

    ";

} else {

    if(isset($_GET["error"])){

    /* Possible errors. Complete error list: http://www.piczasso.com/api_errorcodes.txt */

        $errorcodes = array(

            1000 => "No image selected",

            1001 => "Image failed to upload",

            1002 => "Invalid image type",

            1003 => "Image is larger than 16MB",

            1004 => "Cannot read image info",

            1005 => "Upload failed during process",

            1006 => "Database error",

            1007 => "Banned IP"

        );

        echo $errorcodes[$_GET["error"]];

    }

    /* Sample upload form below. Image can be resized also by sending for example this kind of fields:

        <tr><td>Resize x:</td><td><input type=\"text\" name=\"size_x\"/></td></tr>

        <tr><td>Resize y:</td><td><input type=\"text\" name=\"size_y\"/></td></tr>

    */ 

    echo "

    <form action=\"http://piczasso.com/api_handler.php\" method=\"post\" enctype=\"multipart/form-data\">

    <input type=\"hidden\" name=\"MAX_FILE_SIZE\" value=\"99999999\" />

    <table>

        <tr><td>File:</td><td><input type=\"file\" name=\"file\" /></td></tr>

        <tr><td>Tags:</td><td><input type=\"text\" name=\"tags\" /></td></tr>

        <tr><td>Resize:</td><td>

        <select name=\"size\">

            <option value=\"1\" selected=\"selected\" >None</option>

            <option value=\"2\" >100x75 Avatar</option>

            <option value=\"3\" >150x112 Thumbnail</option>

            <option value=\"4\" >320x240 Websites</option>

            <option value=\"5\" >640x480 For forums</option>

            <option value=\"6\">800x600 15-inch monitor</option>

            <option value=\"7\" >1024x768 17-inch monitor</option>

        </select></td></tr>

        <tr><td><input type=\"submit\" value=\"send\" /></td></tr>

    </table>

    </form>

    ";

}

?>

What is the problem with my python code ?

Please help Thank You

In the PHP code, the form has options for image size. The values are numeric, while the displayed options are text. The value for 'None' is 1.

values = { 'data':open('./imagefile.jpg'),
           'tags':'',
           'size':'1'
}
import urllib2_file
import urllib2

data = {
        'apikey': '**********************************—0',#your APIKey
        'imgurl' : "www.example.net/img/dog1.jpg",
         'catid','0',
        'subject':'',
        'labeland':'',
        'labelor':'',
        'labelnot':''
       }
f = urllib2.urlopen('http://api0.example.com:/api/v1.0/apisim_search', data)
content = f.read()
print(content)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM