首页 技术 正文
技术 2022年11月13日
0 收藏 392 点赞 4,053 浏览 9069 个字

以下示例代码适用于 www.apishop.net 网站下的API,使用本文提及的接口调用代码示例前,您需要先申请相应的API服务。

  1. 六位图片验证码生成:包括纯数字、小写字母、大写字母、大小写混合、数字+小写、数字+大写、数字+大小写等情况。
  2. 四位图片验证码生成:包括纯数字、小写字母、大写字母、大小写混合、数字+小写、数字+大写、数字+大小写等情况。
  3. 简单验证码识别:验证码类型 : 数字+字母, 纯英文, 纯数字,计算题
  4. 英数_验证码识别:纯数字,纯英文,数字+英文
  5. 中英数_验证码识别:英文、数字、中文或混合型
  6. 二维码编解码:支持二维码的生成与识别。二维码生成时,直接返回生成的二维码图片

**API Shop(apishop.net)提供多达50款的常用第三方API,可以从github上下载代码示例合集:https://github.com/apishop/All-APIs**

以上接口均包含PHP、Python、C#和Java等四种语言的代码示例,以 二维码生成 API为例:

(1)基于PHP的 二维码生成 API服务请求的代码示例

<?php$method = "POST";$url = "https://api.apishop.net/common/qrcode/content2QrCode";$headers = NULL;$params = array(    "content" => "", //内容    "size" => "", //图片大小(范围:1~10),默认为4【注:手机扫描,size为4即可】    "level" => "", //容错(0:L,1:M,:2:H,3:Q),默认为0    "margin" => "", //边框大小(范围:1~10),默认为3);$result = apishop_curl($method, $url, $headers, $params);If ($result) {    $body = json_decode($result["body"], TRUE);    $status_code = $body["statusCode"];    If ($status_code == "000000") {        //状态码为000000, 说明请求成功        echo "请求成功:" . $result["body"];    } else {        //状态码非000000, 说明请求失败        echo "请求失败:" . $result["body"];    }} else {    //返回内容异常,发送请求失败,以下可根据业务逻辑自行修改    echo "发送请求失败";}/** * 转发请求到目的主机 * @param $method string 请求方法 * @param $URL string 请求地址 * @param null $headers 请求头 * @param null $param 请求参数 * @return array|bool */function apishop_curl(&$method, &$URL, &$headers = NULL, &$param = NULL){    // 初始化请求    $require = curl_init($URL);    // 判断是否HTTPS    $isHttps = substr($URL, 0, 8) == "https://" ? TRUE : FALSE;    // 设置请求方式    switch ($method) {        case "GET":            curl_setopt($require, CURLOPT_CUSTOMREQUEST, "GET");            break;        case "POST":            curl_setopt($require, CURLOPT_CUSTOMREQUEST, "POST");            break;        default:            return FALSE;    }    if ($param) {        curl_setopt($require, CURLOPT_POSTFIELDS, $param);    }    if ($isHttps) {        // 跳过证书检查        curl_setopt($require, CURLOPT_SSL_VERIFYPEER, FALSE);        // 检查证书中是否设置域名        curl_setopt($require, CURLOPT_SSL_VERIFYHOST, 2);    }    if ($headers) {        // 设置请求头        curl_setopt($require, CURLOPT_HTTPHEADER, $headers);    }    // 返回结果不直接输出    curl_setopt($require, CURLOPT_RETURNTRANSFER, TRUE);    // 重定向    curl_setopt($require, CURLOPT_FOLLOWLOCATION, TRUE);    // 把返回头包含再输出中    curl_setopt($require, CURLOPT_HEADER, TRUE);    // 发送请求    $response = curl_exec($require);    // 获取头部长度    $headerSize = curl_getinfo($require, CURLINFO_HEADER_SIZE);    // 关闭请求    curl_close($require);    if ($response) {        // 返回头部字符串        $header = substr($response, 0, $headerSize);        // 返回体        $body = substr($response, $headerSize);        // 过滤隐藏非法字符        $bodyTemp = json_encode(array(            0 => $body        ));        $bodyTemp = str_replace("\ufeff", "", $bodyTemp);        $bodyTemp = json_decode($bodyTemp, TRUE);        $body = trim($bodyTemp[0]);        // 将返回结果头部转成数组        $respondHeaders = array();        $header_rows = array_filter(explode(PHP_EOL, $header), "trim");        foreach ($header_rows as $row) {            $keylen = strpos($row, ":");            if ($keylen) {                $respondHeaders[] = array(                    "key" => substr($row, 0, $keylen),                    "value" => trim(substr($row, $keylen + 1))                );            }        }        return array(            "headers" => $respondHeaders,            "body" => $body        );    } else {        return FALSE;    }}

(2)基于Python的 二维码生成 API服务请求的代码示例

#!/usr/bin/env python# -*- coding: utf-8 -*-# 测试环境: python2.7# 安装requests依赖 => pip install requests/ easy_install requests# 导入requests依赖import requestsimport jsonimport sysreload(sys)sys.setdefaultencoding('utf-8')def apishop_send_request(method, url, params=None, headers=None):    '''    转发请求到目的主机    @param method str 请求方法    @param url str 请求地址    @param params dict 请求参数    @param headers dict 请求头    '''    method = str.upper(method)    if method == 'POST':        return requests.post(url=url, data=params, headers=headers)    elif method == 'GET':        return requests.get(url=url, params=params, headers=headers)    else:        return Nonemethod = "POST"url = "https://api.apishop.net/common/qrcode/content2QrCode"headers = Noneparams = {    "content":"", #内容    "size":"", #图片大小(范围:1~10),默认为4【注:手机扫描,size为4即可】    "level":"", #容错(0:L,1:M,:2:H,3:Q),默认为0    "margin":"", #边框大小(范围:1~10),默认为3}result = apishop_send_request(method=method, url=url, params=params, headers=headers)if result:    body = result.text    response = json.loads(body)    status_code = response["statusCode"]    if (status_code == '000000'):        # 状态码为000000, 说明请求成功        print('请求成功:%s' % (body,))    else:        # 状态码非000000, 说明请求失败        print('请求失败: %s' % (body,))else:    # 返回内容异常,发送请求失败    print('发送请求失败')

(3)基于C#的 二维码生成 API服务请求的代码示例

using System;using System.Collections.Generic;using System.IO;using System.Net;using System.Text;using System.Web.Script.Serialization;namespace apishop_sdk{class Program{    /**     * 转发请求到目的主机     * @param method string 请求方法     * @param url string 请求地址     * @param params Dictionary<string,string> 请求参数     * @param headers Dictionary<string,string> 请求头     * @return string    **/    static string apishop_send_request(string method, string url, Dictionary<string, string> param, Dictionary<string, string> headers)    {        string result = string.Empty;        try            {                string paramData = "";                if (param != null && param.Count > 0)                {                    StringBuilder sbuilder = new StringBuilder();                    foreach (var item in param)                    {                        if (sbuilder.Length > 0)                        {                            sbuilder.Append("&");                        }                        sbuilder.Append(item.Key + "=" + item.Value);                    }                    paramData = sbuilder.ToString();                }                method = method.ToUpper();                if (method == "GET")                {                    url = string.Format("{0}?{1}", url, paramData);                }                HttpWebRequest wbRequest = (HttpWebRequest)WebRequest.Create(url);                if (method == "GET")                {                    wbRequest.Method = "GET";                }                else if (method == "POST")                {                    wbRequest.Method = "POST";                    wbRequest.ContentType = "application/x-www-form-urlencoded";                    wbRequest.ContentLength = Encoding.UTF8.GetByteCount(paramData);                    using (Stream requestStream = wbRequest.GetRequestStream())                    {                        using (StreamWriter swrite = new StreamWriter(requestStream))                        {                            swrite.Write(paramData);                        }                    }                }                HttpWebResponse wbResponse = (HttpWebResponse)wbRequest.GetResponse();                using (Stream responseStream = wbResponse.GetResponseStream())                {                    using (StreamReader sread = new StreamReader(responseStream))                    {                        result = sread.ReadToEnd();                    }                }            }            catch            {                return "";            }            return result;        }        class Response        {            public string statusCode;        }        static void Main(string[] args)        {            string method = "POST";            string url = "https://api.apishop.net/common/qrcode/content2QrCode";            Dictionary<string, string> param = new Dictionary<string, string>();            param.Add("content", ""); //内容    param.Add("size", ""); //图片大小(范围:1~10),默认为4【注:手机扫描,size为4即可】    param.Add("level", ""); //容错(0:L,1:M,:2:H,3:Q),默认为0    param.Add("margin", ""); //边框大小(范围:1~10),默认为3            Dictionary<string, string> headers = null;            string result = apishop_send_request(method, url, param, headers);            if (result == "")            {                //返回内容异常,发送请求失败                Console.WriteLine("发送请求失败");                return;            }            Response res = new JavaScriptSerializer().Deserialize<Response>(result);            if (res.statusCode == "000000")            {                //状态码为000000, 说明请求成功                Console.WriteLine(string.Format("请求成功: {0}", result));            }            else            {                //状态码非000000, 说明请求失败                Console.WriteLine(string.Format("请求失败: {0}", result));            }            Console.ReadLine();        }    }}

(4)基于Java的 二维码生成 API服务请求的代码示例

package net.apishop.www.controller;import java.io.DataOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.UnsupportedEncodingException;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;import java.net.URLEncoder;import java.util.HashMap;import java.util.Map;import com.alibaba.fastjson.JSONObject;/*** httpUrlConnection访问远程接口工具*/public class Api{    /**    * 方法体说明:向远程接口发起请求,返回字节流类型结果    * param url 接口地址    * param requestMethod 请求方式    * param params 传递参数     重点:参数值需要用Base64进行转码    * return InputStream 返回结果    */    public static InputStream httpRequestToStream(String url, String requestMethod, Map<String, String> params){        InputStream is = null;        try{            String parameters = "";            boolean hasParams = false;            // 将参数集合拼接成特定格式,如name=zhangsan&age=24            for (String key : params.keySet()){                String value = URLEncoder.encode(params.get(key), "UTF-8");                parameters += key + "=" + value + "&";                hasParams = true;            }            if (hasParams){                parameters = parameters.substring(0, parameters.length() - 1);            }            // 请求方式是否为get            boolean isGet = "get".equalsIgnoreCase(requestMethod);            // 请求方式是否为post            boolean isPost = "post".equalsIgnoreCase(requestMethod);            if (isGet){                url += "?" + parameters;            }            URL u = new URL(url);            HttpURLConnection conn = (HttpURLConnection) u.openConnection();            // 请求的参数类型(使用restlet框架时,为了兼容框架,必须设置Content-Type为“”空)            conn.setRequestProperty("Content-Type", "application/octet-stream");            //conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");            // 设置连接超时时间            conn.setConnectTimeout(50000);            // 设置读取返回内容超时时间            conn.setReadTimeout(50000);            // 设置向HttpURLConnection对象中输出,因为post方式将请求参数放在http正文内,因此需要设置为ture,默认false            if (isPost){                conn.setDoOutput(true);            }            // 设置从HttpURLConnection对象读入,默认为true            conn.setDoInput(true);            // 设置是否使用缓存,post方式不能使用缓存            if (isPost){                conn.setUseCaches(false);            }            // 设置请求方式,默认为GET            conn.setRequestMethod(requestMethod);            // post方式需要将传递的参数输出到conn对象中            if (isPost){                DataOutputStream dos = new DataOutputStream(conn.getOutputStream());                dos.writeBytes(parameters);                dos.flush();                dos.close();            }            // 从HttpURLConnection对象中读取响应的消息            // 执行该语句时才正式发起请求            is = conn.getInputStream();        }catch(UnsupportedEncodingException e){            e.printStackTrace();        }catch(MalformedURLException e){            e.printStackTrace();        }catch(IOException e){            e.printStackTrace();        }        return is;    }    public static void main(String args[]){        String url = "https://api.apishop.net/common/qrcode/content2QrCode";        String requestMethod = "POST";        Map<String, String> params = new HashMap<String, String>();        params.put("content", ""); //内容    params.put("size", ""); //图片大小(范围:1~10),默认为4【注:手机扫描,size为4即可】    params.put("level", ""); //容错(0:L,1:M,:2:H,3:Q),默认为0    params.put("margin", ""); //边框大小(范围:1~10),默认为3        String result = null;        try{            InputStream is = httpRequestToStream(url, requestMethod, params);            byte[] b = new byte[is.available()];            is.read(b);            result = new String(b);        }catch(IOException e){            e.printStackTrace();        }        if (result != null){            JSONObject jsonObject = JSONObject.parseObject(result);            String status_code = jsonObject.getString("statusCode");            if (status_code == "000000"){                // 状态码为000000, 说明请求成功                System.out.println("请求成功:" + jsonObject.getString("result"));            }else{                // 状态码非000000, 说明请求失败                System.out.println("请求失败:" + jsonObject.getString("desc"));            }        }else{            // 返回内容异常,发送请求失败,以下可根据业务逻辑自行修改            System.out.println("发送请求失败");        }    }}
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,487
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,903
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,736
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,486
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,126
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,287