精华内容
下载资源
问答
  • 免费api调用平台源码

    2021-02-23 15:41:50
    简介: 里面都是有效的接口,自带统计,直接上传到服务器即可使用,非常方便 网盘下载地址: http://www.bytepan.com/2zCQOZAf6SM

    简介:

    里面都是有效的接口,自带统计,直接上传到服务器即可使用,非常方便


    网盘下载地址:

    http://www.bytepan.com/2zCQOZAf6SM


    展开全文
  • 但是,我想在python应用程序中实现api调用。在curl -T price.xls http://localhost:9998/tika --header "Accept: text/plain"以上是我必须进行的api调用。我可以在我的终端上运行这个程序,工作很好,但是如何在...

    我在我的机器上运行了tika服务器,并使用终端调用api,运行良好。我能从图像和pdf中提取文本。但是,我想在python应用程序中实现api调用。在curl -T price.xls http://localhost:9998/tika --header "Accept: text/plain"

    以上是我必须进行的api调用。我可以在我的终端上运行这个程序,工作很好,但是如何在python应用程序中实现。我已经安装并尝试了请求。在

    ^{pr2}$

    任何帮助都将不胜感激。谢谢:)

    错误输出INFO tika (application/x-www-form-urlencoded)

    WARN tika: Text extraction failed

    org.apache.tika.exception.TikaException: Unexpected RuntimeException from org.apache.tika.server.resource.TikaResource$1@475b0e2

    at org.apache.tika.parser.CompositeParser.parse(CompositeParser.java:282)

    at org.apache.tika.parser.AutoDetectParser.parse(AutoDetectParser.java:143)

    at org.apache.tika.server.resource.TikaResource.parse(TikaResource.java:402)

    at org.apache.tika.server.resource.TikaResource$5.write(TikaResource.java:513)

    at org.apache.cxf.jaxrs.provider.BinaryDataProvider.writeTo(BinaryDataProvider.java:177)

    at org.apache.cxf.jaxrs.utils.JAXRSUtils.writeMessageBody(JAXRSUtils.java:1391)

    at org.apache.cxf.jaxrs.interceptor.JAXRSOutInterceptor.serializeMessage(JAXRSOutInterceptor.java:246)

    at org.apache.cxf.jaxrs.interceptor.JAXRSOutInterceptor.processResponse(JAXRSOutInterceptor.java:122)

    at org.apache.cxf.jaxrs.interceptor.JAXRSOutInterceptor.handleMessage(JAXRSOutInterceptor.java:84)

    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308)

    at org.apache.cxf.interceptor.OutgoingChainInterceptor.handleMessage(OutgoingChainInterceptor.java:90)

    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308)

    at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)

    at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:267)

    at org.apache.cxf.transport.http_jetty.JettyHTTPDestination.doService(JettyHTTPDestination.java:247)

    at org.apache.cxf.transport.http_jetty.JettyHTTPHandler.handle(JettyHTTPHandler.java:79)

    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)

    at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:257)

    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1317)

    at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:205)

    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1219)

    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:144)

    at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:219)

    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)

    at org.eclipse.jetty.server.Server.handle(Server.java:531)

    at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:352)

    at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:260)

    at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:281)

    at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:102)

    at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:118)

    at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:333)

    at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:310)

    at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:168)

    at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:126)

    at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:366)

    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:762)

    at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:680)

    at java.lang.Thread.run(Thread.java:748)

    Caused by: javax.ws.rs.WebApplicationException: HTTP 415 Unsupported Media Type

    at org.apache.tika.server.resource.TikaResource$1.parse(TikaResource.java:128)

    at org.apache.tika.parser.CompositeParser.parse(CompositeParser.java:280)

    ... 37 more

    ERROR Problem with writing the data, class org.apache.tika.server.resource.TikaResource$5, ContentType: text/plain

    展开全文
  • Aardio - API调用分析

    千次阅读 2021-01-11 13:29:17
    1、aardio在API调用时,除结构体外的数据类型,都是传值,只能作为输入参数。 如果要作为“输出参数”传递指针,需要使用结构体代替,如: 数值的指针: {int abc} 或 {int abc=123}。 数值数组的指针:{int ...

    注:以下内容仅为本人当前理解,不保证正确,可能随时更新。

    欢迎各位aardio爱好者交流,共同研究aardio,知对改错,共同进步。

    愿aardio越来越强大。

    API调用解析

    1、静态数据类型参数

    1、静态数据类型(number、pointer等)在API调用时,不管声明或不声明,都是传值,只能作为输入参数。

    2、如果要作为“输出参数”传递指针(传址),需要使用结构体代替。

    3、使用table定义结构体struct,在结构体中定义静态类型。

    4、struct中所有成员应当赋于初始值(待验证,看下面的小测试)。

    如:

    数值的指针: {int abc} 或  {int abc=123}。

    数值数组的指针:{int data[4]} 。

    字节数组的指针:{byte data[4]} 或 raw.buffer() 

    // 通常,我们使用class来定义API函数中需要用到的结构体:
    
    class POINT{
    int x = 0; // 结构体成员必须设定初始值
    int y = 0; 
    }
    
    // 创建一个结构体对象
    pt = POINT();
    
    // 每个结构体会创建一个_struct只读字段记录类型定义,语义如下:
    pt = { _struct = "int x;int y" }

    小测试: 关于struct中所有成员应当赋于初始值

    测试结论:即便没有给struct的成员赋予初始值,也一切OK。

    我觉得像 int 这种定长的数据类型,没有初始值也没关系。

    如果是数组,应该要提前确定结构长度。

    易语言dll代码:

    aardio调用代码:

    没有赋予struct初始值,int类型的值默认为0


    传递给api后,也可以正常修改变量值。

    2、动态数据类型参数

          1、动态类型(string、buffer)本身就是指针,所以不能再传址。

                也就是说,从表面上来看,他们只能作为输入参数,不能作为输出参数。

                然而,虽然如此,但因其本身就是指针,所以其值在api中也可以被修改。

          2、struct在声明API时,可以作为输入或输出参数;不声明API时,强制作为输出参数。

                作为输入参数时,传递的是数值(传值),不作为API返回值返回。

                作为输出参数时,传递的是指针(传址),并作为API返回值返回。

    3、不声明直接调用API:

    一、参数:

    1、不声明直接调用API,可以根据需要灵活改变参数类型,也更方便、节省资源,建议使用。

    2、调用约定在加载DLL的参数中指定,支持cdecl不定个数参数。

    3、null参数不可省略。

    4、数值参数一律处理为32位int整型。(小于32位的整数、枚举类型、8位或32位bool值都跟int 32位数值兼容)

    5、64位整数可以用math.size64对象表示。(或者用两个数值参数表示一个64位整数值参数,其中第一个参数表示低32位数值,第二个参数表示高32位数值)

    6、数值类型的指针(输出参数)一律使用结构体表示。

    7、数组指针,使用结构体指针替代,如 {int data[4]} 。

    8、结构体,一律处理为输出参数,并在aardio返回值中返回。

    9、除结构体外的其他类型,只能作为输入参数。

    0、注意在aardio中,任何结构体在API调用中传递的都是结构体指针(传址)(待进一步验证,因为在下面的简单数值型struct测试代码中,进行不传址测试时,api中并未能成功改变真实变量的值。

          这里说的意思很有可能是:任何结构体在API直接调用中传递的都是结构体指针)。

    二、返回值:

    1、直接调用API的,返回值默认为int类型。

    2、可以使用 【API尾标】 改变返回值为其他类型。

    3、未声明的API函数,只是一个普通的aardio函数对象,不能作为函数指针参数传给API参数(声明后的API函数对象是可以的)。

    4、结构体总是作为输出参数,附加在api返回值后面返回。

    三、API尾标:

    1、当不声明直接调用API时,API函数名尾部如果不是大写字符,则可以使用一个大写的特定字符(这就是API尾标)修改默认的API调用规则。

    2、在API函数名后添加尾标,不会影响到查找API函数的结果,无论真实的API带不带指定的尾标,aardio都能找到真实的函数。

    3、所有可用的 [API尾标] 及代表的规则如下:

    • dll.ApiNameW()    切换到Unicode版本,字符串UTF8-UTF16双向转换
    • dll.ApiNameA()     切换到ANSI版本,字符串不作任何转换
    • dll.ApiNameL()     返回值为64位LONG类型
    • dll.ApiNameP()     返回值为pointer指针类型
    • dll.ApiNameD()     返回值为double浮点数
    • dll.ApiNameF()     返回值为float浮点数
    • dll.ApiNameB()     返回值为byte类型(C++中的8位bool)

    4、对于已存在W尾标的API函数,可在调用时使用其他尾标,并且仍然可以正确检测并切换到API函数的Unicode版本。

    四、使用字符串

    1、字符串、buffer类型字节数组,一般作为字符串指针使用。

    2、如果API需要向字符串指向的内存中写入数据,那么必须使用raw.buffer()函数创建定长的字节数组。

    3、普通的aardio字符串指向的内存是禁止写入的(这种说法,仅对aardio常规操作而言,看看下面的api测试代码,可以成功修改字符串的值),aardio中修改普通字符串会返回新的字符串对象,而不是在原内存上修改数据。

    4、对于Ansi版本的API,string字符串直接输入原始的数据(文本默认是UTF8编码)。

          对于Unicode版本的API,string字符串会被强制转换为Unicode(UTF16)。

          buffer类型的参数,总是以二进制方式使用原始数据与API交互(不会做文本编码转换)。

    五、Ansi和Unicode

    1、可以在 raw.loadDll ( ) 加载DLL时,可以在调用约定中添加 ",unicode",让它默认使用Unicode API。

    2、可以在函数名后添加尾标"A"或“W”,声明Ansi或Unicode版本的API。

          如果同时指定尾标版本 和 loadDll约定版本,则以尾标版本为准。

          aardio在找不到该版本的API函数时,会移除尾标,但依然会根据指定的尾标版本,进行字符串编码。

    4、一些API在接收字符串、字节数组等参数时,通常下一个参数需要指定内存长度, aardio中用#操作符取字符串、缓冲区的长度时,返回的都是字节长度,一些API可能需要你传入字符个数,如果是Unicode版本的API一个字符为两个字节,对于一个UTF8字符串应当事用string.len()函数得到真正的字符长度, 而Unicode字符串则用#取到字节长度后乘以2即可。

    简单数值型struct测试

    易语言编写的dll代码:

    aardio调用代码:

    1、定义为输入参数时【不传址】:

    // 结构体未定义为输出参数:
    
    import console; 
    
    testdll = raw.loadDll("C:\Users\Administrator\Desktop\test.dll")
    test=testdll.api("test","int(struct)","stdcall")
    
    var i = {int abc=123}
    
    var a,b = test (i)
    console.dump("a:",a)
    console.dump("b:",b)
    console.dump("i:",i)
    
    console.pause(true);
    

    执行结果

     

    执行结果:传递进去数值正常;修改结构体数据失败;返回值正常;结构体未作为返回值返回;

    2、定义为输出参数时【传址】:

    import console; 
    
    testdll = raw.loadDll("C:\Users\Administrator\Desktop\test.dll")
    test=testdll.api("test","int(struct&)","stdcall")
    
    var i = {int abc=123}
    
    var a,b = test (i)
    console.dump("a:",a)
    console.dump("b:",b)
    console.dump("i:",i)
    
    console.pause(true);
    

    执行结果:

    执行结果:传入api数值正常;api中修改结构体变量数据正常;返回值正常;结构体作为返回值返回成功;

    3、直接调用API函数时:

    import console; 
    
    testdll = raw.loadDll("C:\Users\Administrator\Desktop\test.dll")
    
    var i = {int abc=123}
    var a,b = testdll.test(i)
    
    console.dump("a:",a)
    console.dump("b:",b)
    console.dump("i:",i)
    
    console.pause(true);
    

    结果同上。因为struct被强制作为输出参数进行了传址。

     简单string字符串传址测试

    1、易语言编写的dll代码:

    2、aardio调用示例(传址):

    import console; 
    
    testdll = raw.loadDll("C:\Users\Administrator\Desktop\test.dll")
    test=testdll.api("test","string(string&)","stdcall")
    
    var i =..string.fromto("张三丰")
    
    var a,b = test(i)
    
    console.dump("a:",a)
    console.dump("b:",b)
    console.dump("i:",i)
    
    console.pause(true);
    

    3、执行结果:

    执行结果:传入api文本正常;api中修改文本变量数据失败;返回值正常;传出参数修改后的数据作为返回值返回。

    4、aardio调用示例(不传址):

    执行结果:传入api文本正常;api中修改文本变量数据成功;返回值正常;无附加返回值。

    我的大胆猜想

    1、可能是出于保护内存数据安全或其他目的,aardio对除结构体以外的数据类型,都做了保护,禁止传址,防止其数据被非法篡改。

    2、当这些数据类型被强制传址时,aardio会申请与其数据一致的临时变量,传址给api执行,并获得api执行结果和被修改后的临时变量数据,返回给aardio。

    3、所谓的“只读”、“不可修改”只是相对而言,因为你无法提供准确有效的获取 诸如 var i=123 这种变量的地址的有效方法,所以才感觉无法修改。

    4、为了验证这个猜想,做一个lstrcpyn测试:

    通过测试结果可以看出,api确实成功修改并返回了传址进去的数值型变量的值,但实际上真实变量的值却并没有发生改变。因为api改的是临时变量的值,aardio取的也是临时变量的值。

    5、通过lstrcpyn测试和上面的文本传址测试,其结果初步符合上述猜想。

    注:该猜想已于2021-10-12版本 v33.18.3 更新 raw.argsPointer 库时提供的例程:

    范例程序\ aardio 语言\ 语言扩展\ 结构体二级指针 

    中得到了证实,校长做了如下注解:

    aardio 结构体作为调用 API 的参数时会分配一块临时的内存,
    并将 aardio 结构体的值复制过去,然后将该内存的指针作为调用 API 的参数,
    在调用 API 结束后再将内存中新的值同步到 aardio 结构体,然后立即释放临时内存,
    释放临时内存是立即操作,而非等待垃圾回收器操作。

    文本传址与不传址的深入测试:

    同样用易语言写一个dll,功能:

    1、显示传递进来的文本变量的值

    2、显示传递进来的文本变量的地址

    3、修改传递进来的文本变量的内存数据

    4、返回一个文本值

    1、用两个内容【一样】的string变量进行【不传址】测试。

    第一步:传递第1个变量 t1,api中提示:内容为“张三丰”,变量地址为 36657216

    第二步:api中修改了变量 t1 的内容为“我很好”,aardio中console也同步显示,返回值为“哈哈哈”,t1为“我很好”,OK,正确无误。

    第三步:传递第2个变量 t2,api中提示:内容为“我很好”,变量地址为 36657216。

    那么问题来了,为什么 t2 不是 “张三丰” 呢?

    那是因为aardio中,同样内容的文本变量,共享同一内存地址。

    你改了一个,等于是改了所有。

    这也是为什么这两个变量传递进去的“变量地址”是一样的原因。

    所以,这里传给api的,就是string变量的“真实地址”。

    第四步:执行完毕,毫无悬念。

    结论就是:t1 、t2 内容一样,地址一样,api改一个变量的内存数据,等于全改了。“不传址”的情况下,传给api的反而是真实地址。

    2、用两个内容【不一样】的string变量进行【不传址】测试。

    第一步:传递第1个变量 t1,api中提示:内容为“张三丰”,变量地址为 27875392

    第二步:api中修改了变量 t1 的内容为“我很好”,aardio中console也同步显示,返回值为“哈哈哈”,t1为“我很好”,OK,正确无误。

    第三步:传递第2个变量 t2,api中提示:内容为“张无忌”,变量地址为 27875424。

    第四步:执行完毕,变量 t2 内容变为“我很好”。

    执行完毕,结论就是:t1 、t2 内容不一样,地址也不一样,“不传址”的情况下,传给api的都是真实地址,都被api成功修改。

    3、用两个内容【一样】的string变量进行【传址】测试。

    因为string传址会被aardio作为返回值返回,也就是说api会有多个返回值,所以我们下面的测试代码中,将api的执行结果放在console.log的最后一个参数,以便于能全部显示出来。

    第一步:传递第1个变量 t1,api中提示:内容为“张三丰”,变量地址为27423792。

    第二步:api中没有成功修改变量 t1 的内容为“我很好”,t1 的真实内容仍然为“张三丰”。返回值为“哈哈哈”,但返回值中的 t1 为“我很好”。 

    第三步:传递第2个变量 t2,api中提示:内容为“张三丰”,变量地址为 27423792。

    同样,t1、t2 内容一样,地址一样,因为 t1 没有被修改,所以 t2 传进去,还是 “张三丰”。

    所以,这里传给api的,应该不是string变量 t1 的“真实地址”。

    但 api 却成功修改并返回了修改后的“正确”结果,所以猜想这里用了一个临时变量去“欺骗”api,而非真实的 t1。

    而且,两次传递的临时变量地址是一样的,但第一次传递后,明明内容被修改了,第二次传递却又恢复了。

    这说明:aardio将临时变量传递给api时,是先给临时变量同步了真实变量的值。

    第四步:执行完毕,结论就是:“传址”的情况下,先把真实变量的值,复制给临时变量,再把临时变量传给api。api改的是临时变量的值,返回的也是临时变量的值。

    4、用两个内容【不一样】的string变量进行【传址】测试。

    第一步:传递第1个变量 t1,api中提示:内容为“张三丰”,变量地址为36533296。

    第二步:api中没有成功修改变量 t1 的内容为“我很好”,t1 的真实内容仍然为“张三丰”。返回值为“哈哈哈”,但返回值中的 t1 为“我很好”。 

    第三步:传递第2个变量 t2,api中提示:内容为“张无忌”,变量地址为36533296。OK,临时变量走一波。

    第四步:执行完毕,t2 的真实内容仍然为“张无忌”,返回值为“哈哈哈”,但返回值中的 t2 为“我很好”。 

    结论就是:跟上面一样,临时变量走一波耶~~~

     API字符串传址方法示例 —— 先声明后调用:

    以 User32.GetWindowTextA 为例,演示如何传递指针(文本指针、缓冲区指针、结构体指针)给api函数调用。

    import console; 
    import win
    
    var gwt,t
    
    //定义传址的文本变量为 string 类型
    gwt = ::User32.api("GetWindowTextA","int(addr,string,int)")
    		// 用string类型变量
    		t = string.repeat(255,'\x0')
    		gwt (..win.getForeground(),t,255)
    		console.log('定义为 string 类型,传递 string 类型,返回结果:\n'+t)
    		// 用buffer类型变量
    		t = raw.buffer(255)
    		gwt (..win.getForeground(),t,255)
    		console.log('定义为 string 类型,传递 buffer 类型,返回结果:\n'+ tostring(t))
    		
    //定义传址的文本变量为 pointer 类型
    gwt = ::User32.api("GetWindowTextA","int(addr,pointer,int)")
    		// 用string类型变量
    		t = string.repeat(255,'\x0')
    		gwt (..win.getForeground(),t,255)
    		console.log('定义为 pointer 类型,传递 string 类型,返回结果:\n'+ t)
    		// 用buffer类型变量
    		t = raw.buffer(255)
    		gwt (..win.getForeground(),t,255)
    		console.log('定义为 pointer 类型,传递 buffer 类型,返回结果:\n'+ tostring(t))
    		
    //定义传址的文本变量为 struct& 类型
    gwt = ::User32.api("GetWindowTextA","int(addr,struct&,int)")
    		// 用struct类型变量
    		t = {byte t[255]}
    		gwt (..win.getForeground(),t,255)
    		console.log('定义为 struct& 类型,传递 struct 类型,返回结果:\n'+ tostring(t.t))
    
    console.pause(true);
    

    执行结果:

     

    API字符串传址方法示例 —— 不声明直接调用:

    		t = string.repeat(255,'\x0')
    		User32.GetWindowTextA(..win.getForeground(),t,255)
    		console.log('传递 string 类型,直接调用:返回结果:\n'+ t)
    
    		t = raw.buffer(255)
    		User32.GetWindowTextA(..win.getForeground(),t,255)
    		console.log('传递 buffer 类型,直接调用:返回结果:\n'+ tostring(t))
    
    		t = {byte t[255]}
    		User32.GetWindowTextA(..win.getForeground(),t,255)
    		console.log('传递 struct 类型,直接调用:返回结果:\n'+ tostring(t.t))
    

     执行结果:

    ===============================================================

    关于处理掉字符串尾部0的方法

    aardio中字符串是允许包含字符0的,所以通过传址方式获取的字符串,在aardio中不会遇0终止,但是可以通过通过以下方法来截掉后面多余的 \0

    t = string.repeat(255,'\x0')
    gwt (..win.getForeground(),t,255)
    //方法一(推荐)
    t = ..raw.tostring(..raw.toPointer(t))
    //方法二
    t = ..string.trimright(t,'\0')
    

    ===============================================================

    结束语:

    以上内容抛砖引玉,不保证完全正确,如果有不对之处,欢迎留言指正。

    展开全文
  • import java.io.File; import java.io.FileOutputStream; import java.io.IOException;... // 调用接口 String path = image; JSONObject res = client.basicGeneral(path, new HashMap()); return res; } }

    package com.cn.until;

    import java.io.File;

    import java.io.FileOutputStream;

    import java.io.IOException;

    import java.io.InputStream;

    import java.io.OutputStream;

    import java.util.ArrayList;

    import java.util.Date;

    import java.util.List;

    import javax.servlet.ServletException;

    import javax.servlet.annotation.WebServlet;

    import javax.servlet.http.HttpServlet;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.http.HttpServletResponse;

    import org.apache.commons.fileupload.FileItem;

    import org.apache.commons.fileupload.disk.DiskFileItemFactory;

    import org.apache.commons.fileupload.servlet.ServletFileUpload;

    @WebServlet("/imageSerlvet")

    public class imageSerlvet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    doPost(request, response);

    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    DiskFileItemFactory factory = new DiskFileItemFactory();

    factory.setSizeThreshold(1024 * 500);

    ServletFileUpload upload = new ServletFileUpload(factory);

    upload.setSizeMax(1024 * 1024 * 5);

    try {

    List  items = upload.parseRequest(request);

    // 2. 遍历 items:

    for (FileItem item : items) {

    // 文件名

    String fileName = item.getName();

    InputStream in = item.getInputStream();

    byte[] buffer = new byte[1024];

    int len = 0;

    /*

    * 用到了io操作浪费资源  是不是可以不用写io 要怎么写

    */

    OutputStream out = new FileOutputStream(fileName);

    while ((len = in.read(buffer)) != -1) {

    out.write(buffer, 0, len);

    }

    out.close();

    in.close();

    System.out.println(Sample.get(fileName).toString());

    }

    } catch (Exception e) {

    e.printStackTrace();

    }

    }

    }

    package com.cn.until;

    import java.util.HashMap;

    import org.json.JSONObject;

    import com.baidu.aip.ocr.AipOcr;

    public class Sample {

    //设置APPID/AK/SK

    public static final String APP_ID = "10570384";

    public static final String API_KEY = "74ik5L8ZlazExSPdodV3G2ZQ";

    public static final String SECRET_KEY = "eqwGnR5CYQb8aUGaI2dAxQhAqHM10Giu";

    public static JSONObject get(String image) {

    AipOcr client = new AipOcr(APP_ID, API_KEY, SECRET_KEY);

    client.setConnectionTimeoutInMillis(2000);

    client.setSocketTimeoutInMillis(60000);

    // 调用接口

    String path = image;

    JSONObject res = client.basicGeneral(path, new HashMap());

    return res;

    }

    }

    展开全文
  • Android通过对外提供API接口重组资源,吸引了大量第三方开发人员创造出功能丰富的Android应用。但是,由于Android平台监管不严,恶意软件数量急剧增长。恶意软件中存在的自动联网、发送短信、窃取用于隐私等问题不但给...
  • 网络API调用与Json的处理 经常听说API调用工程师,可什么是API呢?我自己写的Controller算Api吗?其实API就是接口,你自己写的控制层逻辑肯定也算API,但是通常意义上,我们偶尔会调用网络上的API供自己使用,以降低...
  • 若依微服务间API调用
  • 【技术实现步骤摘要】本专利技术涉及计算机领域,具体涉及一种微服务中API调用统计和监控的方法。技术介绍现有的框架分布式SOA对性能要求很高,监控部分要求记录数据业务量,每天记录高达上亿次调用记录,传统的集中...
  • 调用百度UNIT对话机器人一、功能描述二、创建机器人应用二、在原来的语音识别应用中添加UNIT功能 (或者直接新开一个应用也可以)三、python调用百度对话机器人四、使用实例 一、功能描述   调用百度UNIT平台中...
  • 安卓实现每日一句功能-一言API调用

    千次阅读 2021-06-21 09:49:16
    一言API官网地址:https://hitokoto.cn/
  • 其原理是:开发者通过 RESTful API 发起录制请求,并将待录制页面的 URL 以请求参数的形式发给 Agora 录制服务,Agora 录制服务会打开该Web页面,并以录屏的方式实时录制生成 MP4 文件,上传至指定的第三方云存储...
  • 这篇文章主要介绍了php有道翻译api调用方法,实例分析了有道翻译API接口的调用方法与相关技巧,非常具有实用价值,需要的朋友可以参考下本文实例讲述了php有道翻译api调用方法,这里我们利用了file_get_contents函数直接...
  • API调用的几种类型

    2021-05-16 13:31:54
    API是对APP的包装,也就是通常所说的接口,APP和APP间的互相调用,包括读取...学习调用API是dev ops的必备技能,大家最熟悉的应该是REST API的调用吧,没错这是现在很通用很流行的一种API调用方式,还有一些其他的...
  • 如何调用别人服务/接口”的场景在当前互联网应用中并不少见,传统的调用方式就有rmi以及基于soap的webservice等方式。而在当前微服务、分布式时代,更多的则有spring cloud以及dubbo+zookeeper等方式,相对而言,sc...
  • 阿里云视频点播的使用(API调用示例的运行) 本文着重介绍阿里云视频点播的API和SDK的使用,实现这两种方式的视频播放凭证和视频播放地址的获取。 阿里云视频点播API的使用方法 一:准备工作 1、给AccessKey用户组...
  • Python基础——API调用

    千次阅读 2021-07-28 17:58:14
    依赖于外部数据源的大多数应用程序都依赖于API调用,如集成社交媒体网站的应用程序 #requests包让Python程序能够轻松地向网站请求信息以及检查返回的响应。 (1)安装requests包 pip install requests # or pip ...
  • 腾讯地图JavaScript API调用1、加载地图 API页面直接引入https://map.qq.com/api/js?v=2.exp&key=OB4BZ-D4W3U-B7VVO-4PJWW-6TKDJ-WPB77 网址是API文件的位置,v2.0 指当前使用的API的版本标识,key=[申请的开发...
  • python实现API调用

    2021-12-11 09:38:17
    python实现API调用以及数据接口的调用,常用的一些API参考示例。
  • 我使用axios作为HTTP客户端进行api调用,我在src文件夹中创建了一个gateways文件夹,我为每个后端创建了文件,创建了axios instances,如下所示myApi.jsimport axios from 'axios'export default axios.create({...
  • 阿里API调用二(PHP)

    2021-01-12 21:45:00
    //最后的接口调用地址 $apiprourlall=$apiprourl.$apiproparam.'?'.$apiproparam1.'&access_token='.$access_token.'&_aop_signature='.$appprosignature; //通过getContent()获取返回内容 getContent($...
  • 15.系统调用(R3函数API调用过程详解)

    千次阅读 2021-10-10 14:45:56
    R3API调用分析 <1>.将编译好的文件拖入DBG / OD 分析(定位MAIN函数找到API调用位置) <2>.OpenProcess执行流程分析 <3>.ReadProcessMemory执行流程分析 R3API功能实现分析 <1>....
  • 百度API调用(三)——语音识别

    千次阅读 2021-01-31 19:29:39
    python 调用百度语音识别API 一、开通百度语音技术接口服务 基本过程: 1、打开百度ai开放平台 https://ai.baidu.com/ 2、打开控制台 3、选择语音技术 4、选择创建应用 5、选择需要的服务,简单填写应用描述...
  • 使用Python,鉴于它是.apk文件,我试图提取Android应用程序进行的API调用。有没有一种方法可以通过对包的APK进行静态分析来解析/提取包所使用的API的名称?到目前为止,这是我尝试过/发现的内容。我之前曾看到过此...
  • 腾讯云短信API调用

    2021-12-14 12:39:16
    完成以上步骤基本就剩下调用API了。这里腾讯云提供了调试。 文档地址: https://cloud.tencent.com/document/product/382/55981 第四步:生成调用短信API代码 具体代码:(这里构建的是JavaWeb项目) 因为我在调用...
  • 申请百度地图开发者百度地图API是为开发者免费提供的一套基于百度地图服务的应用接口,包括JavaScript API、Web服务API、Android SDK、iOS SDK、定位SDK、车联网API、LBS云等多种开发工具与服务,提供基本地图展现、...
  • 如果没有关于您正在做什么的更多信息,很难肯定地说,但简单的线程方法可能有意义.假设您有一个处理单个ID的简单函数:import requestsurl_t = "http://localhost:8000/records/%i"def process_id(id):"""process a ...
  • Java 调用 Docker API

    2021-02-12 21:21:57
    在 Docker 官网查阅 API 调用方式例如:查询正在运行的容器列表,HTTP 方式如下:$ curl --unix-socket /var/run/docker.sock http:/v1.24/containers/json[{"Id":"ae63e8b89a26f01f6b4b2c9a7817c31a1b6196acf560f...
  • C# 调用Web Api通用方法

    2021-11-20 20:55:18
    /// 通过web api获取数据的方法 /// </summary> /// <param name="url">api的url</param> /// <param name="method">请求类型,默认是get</param> /// <param name="postData...
  • VBA可以调用很多windows的API,但是需要提前声明 64位的聲明要多加一個關鍵字的 Declare PtrSafe Function 增加PtrSafe即可 #...
  • vue实现百度语音播报API调用 //百度语音播报 Vue.prototype.$speckText = function(str) { var url = "http://tts.baidu.com/text2audio?lan=zh&ie=UTF-8&spd=6&text=" + encodeURI(str); new Audio...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,698,927
精华内容 679,570
关键字:

api调用

友情链接: usb读卡器.zip