Mercurial > octave
annotate libinterp/corefcn/urlwrite.cc @ 27919:1891570abac8
update Octave Project Developers copyright for the new year
In files that have the "Octave Project Developers" copyright notice,
update for 2020.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Mon, 06 Jan 2020 22:29:51 -0500 |
parents | b442ec6dda5c |
children | bd51beb6205e |
rev | line source |
---|---|
6043 | 1 /* |
2 | |
27919
1891570abac8
update Octave Project Developers copyright for the new year
John W. Eaton <jwe@octave.org>
parents:
27918
diff
changeset
|
3 Copyright (C) 2006-2020 The Octave Project Developers |
27918
b442ec6dda5c
use centralized file for copyright info for individual contributors
John W. Eaton <jwe@octave.org>
parents:
27795
diff
changeset
|
4 |
b442ec6dda5c
use centralized file for copyright info for individual contributors
John W. Eaton <jwe@octave.org>
parents:
27795
diff
changeset
|
5 See the file COPYRIGHT.md in the top-level directory of this distribution |
b442ec6dda5c
use centralized file for copyright info for individual contributors
John W. Eaton <jwe@octave.org>
parents:
27795
diff
changeset
|
6 or <https://octave.org/COPYRIGHT.html/>. |
b442ec6dda5c
use centralized file for copyright info for individual contributors
John W. Eaton <jwe@octave.org>
parents:
27795
diff
changeset
|
7 |
6043 | 8 |
9 This file is part of Octave. | |
10 | |
24534
194eb4bd202b
maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents:
23829
diff
changeset
|
11 Octave is free software: you can redistribute it and/or modify it |
22755
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
12 under the terms of the GNU General Public License as published by |
24534
194eb4bd202b
maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents:
23829
diff
changeset
|
13 the Free Software Foundation, either version 3 of the License, or |
22755
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
14 (at your option) any later version. |
6043 | 15 |
22755
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
16 Octave is distributed in the hope that it will be useful, but |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
17 WITHOUT ANY WARRANTY; without even the implied warranty of |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
19 GNU General Public License for more details. |
6043 | 20 |
21 You should have received a copy of the GNU General Public License | |
7016 | 22 along with Octave; see the file COPYING. If not, see |
24534
194eb4bd202b
maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents:
23829
diff
changeset
|
23 <https://www.gnu.org/licenses/>. |
6043 | 24 |
25 */ | |
26 | |
27 // Author: Alexander Barth <abarth@marine.usf.edu> | |
28 // Adapted-By: jwe | |
29 | |
21724
aba2e6293dd8
use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents:
21547
diff
changeset
|
30 #if defined (HAVE_CONFIG_H) |
21301
40de9f8f23a6
Use '#include "config.h"' rather than <config.h>.
Rik <rik@octave.org>
parents:
21200
diff
changeset
|
31 # include "config.h" |
6043 | 32 #endif |
33 | |
34 #include <string> | |
35 #include <fstream> | |
36 #include <iomanip> | |
37 | |
9880 | 38 #include "dir-ops.h" |
8151
3725f819b5b3
urlwrite.cc (Furlwrite): delete files we create if download fails
John W. Eaton <jwe@octave.org>
parents:
7481
diff
changeset
|
39 #include "file-ops.h" |
3725f819b5b3
urlwrite.cc (Furlwrite): delete files we create if download fails
John W. Eaton <jwe@octave.org>
parents:
7481
diff
changeset
|
40 #include "file-stat.h" |
25548
d6050ba12c0c
Call get_ASCII_filename for std::ifstream (bug #49118).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25438
diff
changeset
|
41 #include "lo-sysdep.h" |
6043 | 42 #include "oct-env.h" |
17548
92541ff4cc3c
improve implementation of ftp object handles
John W. Eaton <jwe@octave.org>
parents:
17546
diff
changeset
|
43 #include "oct-handle.h" |
9880 | 44 #include "glob-match.h" |
17555
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
17554
diff
changeset
|
45 #include "url-transfer.h" |
6043 | 46 |
17555
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
17554
diff
changeset
|
47 #include "defun.h" |
6043 | 48 #include "error.h" |
23742
1f0daaf81955
don't use singleton for ch_manager, rename to url_handle_manager
John W. Eaton <jwe@octave.org>
parents:
23577
diff
changeset
|
49 #include "interpreter.h" |
9880 | 50 #include "oct-map.h" |
13985
43cc49c7abd1
Use thread-safe atomic reference counting (GCC and MSVC).
Michael Goffioul <michael.goffioul@gmail.com>
parents:
13978
diff
changeset
|
51 #include "oct-refcount.h" |
23742
1f0daaf81955
don't use singleton for ch_manager, rename to url_handle_manager
John W. Eaton <jwe@octave.org>
parents:
23577
diff
changeset
|
52 #include "ov-cell.h" |
27048
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
53 #include "ov-classdef.h" |
23742
1f0daaf81955
don't use singleton for ch_manager, rename to url_handle_manager
John W. Eaton <jwe@octave.org>
parents:
23577
diff
changeset
|
54 #include "ovl.h" |
1f0daaf81955
don't use singleton for ch_manager, rename to url_handle_manager
John W. Eaton <jwe@octave.org>
parents:
23577
diff
changeset
|
55 #include "pager.h" |
8151
3725f819b5b3
urlwrite.cc (Furlwrite): delete files we create if download fails
John W. Eaton <jwe@octave.org>
parents:
7481
diff
changeset
|
56 #include "unwind-prot.h" |
23742
1f0daaf81955
don't use singleton for ch_manager, rename to url_handle_manager
John W. Eaton <jwe@octave.org>
parents:
23577
diff
changeset
|
57 #include "url-handle-manager.h" |
17550
77127a3badaa
move curl_object actions to rep class
John W. Eaton <jwe@octave.org>
parents:
17549
diff
changeset
|
58 |
77127a3badaa
move curl_object actions to rep class
John W. Eaton <jwe@octave.org>
parents:
17549
diff
changeset
|
59 static void |
77127a3badaa
move curl_object actions to rep class
John W. Eaton <jwe@octave.org>
parents:
17549
diff
changeset
|
60 delete_file (const std::string& file) |
77127a3badaa
move curl_object actions to rep class
John W. Eaton <jwe@octave.org>
parents:
17549
diff
changeset
|
61 { |
21733
cb0fdd941d84
use namespace for system file_ops class
John W. Eaton <jwe@octave.org>
parents:
21732
diff
changeset
|
62 octave::sys::unlink (file); |
17550
77127a3badaa
move curl_object actions to rep class
John W. Eaton <jwe@octave.org>
parents:
17549
diff
changeset
|
63 } |
6043 | 64 |
17555
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
17554
diff
changeset
|
65 DEFUN (urlwrite, args, nargout, |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
66 doc: /* -*- texinfo -*- |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
67 @deftypefn {} {} urlwrite (@var{url}, @var{localfile}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
68 @deftypefnx {} {@var{f} =} urlwrite (@var{url}, @var{localfile}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
69 @deftypefnx {} {[@var{f}, @var{success}] =} urlwrite (@var{url}, @var{localfile}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
70 @deftypefnx {} {[@var{f}, @var{success}, @var{message}] =} urlwrite (@var{url}, @var{localfile}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
71 Download a remote file specified by its @var{url} and save it as |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
72 @var{localfile}. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
73 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
74 For example: |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
75 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
76 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
77 @group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
78 urlwrite ("ftp://ftp.octave.org/pub/README", |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
79 "README.txt"); |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
80 @end group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
81 @end example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
82 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
83 The full path of the downloaded file is returned in @var{f}. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
84 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
85 The variable @var{success} is 1 if the download was successful, |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
86 otherwise it is 0 in which case @var{message} contains an error message. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
87 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
88 If no output argument is specified and an error occurs, then the error is |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
89 signaled through Octave's error handling mechanism. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
90 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
91 This function uses libcurl. Curl supports, among others, the HTTP, FTP, and |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
92 FILE protocols. Username and password may be specified in the URL, for |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
93 example: |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
94 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
95 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
96 @group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
97 urlwrite ("http://username:password@@example.com/file.txt", |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
98 "file.txt"); |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
99 @end group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
100 @end example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
101 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
102 GET and POST requests can be specified by @var{method} and @var{param}. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
103 The parameter @var{method} is either @samp{get} or @samp{post} and |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
104 @var{param} is a cell array of parameter and value pairs. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
105 For example: |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
106 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
107 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
108 @group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
109 urlwrite ("http://www.google.com/search", "search.html", |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
110 "get", @{"query", "octave"@}); |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
111 @end group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
112 @end example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
113 @seealso{urlread} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
114 @end deftypefn */) |
6043 | 115 { |
116 int nargin = args.length (); | |
117 | |
118 // verify arguments | |
119 if (nargin != 2 && nargin != 4) | |
20799
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20726
diff
changeset
|
120 print_usage (); |
6043 | 121 |
20700
68e3a747ca02
rename octave_value value extractors that accept error message args
John W. Eaton <jwe@octave.org>
parents:
20681
diff
changeset
|
122 std::string url = args(0).xstring_value ("urlwrite: URL must be a string"); |
6043 | 123 |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20909
diff
changeset
|
124 // name to store the file if download is successful |
20700
68e3a747ca02
rename octave_value value extractors that accept error message args
John W. Eaton <jwe@octave.org>
parents:
20681
diff
changeset
|
125 std::string filename = args(1).xstring_value ("urlwrite: LOCALFILE must be a string"); |
19404
c2f4f6eb5907
A few more instances of stricter input validation for strings (bug #42651).
Rik <rik@octave.org>
parents:
19403
diff
changeset
|
126 |
6043 | 127 std::string method; |
17554
f0d21e7d4653
avoid Cell arrays in usr_transfer classes
John W. Eaton <jwe@octave.org>
parents:
17553
diff
changeset
|
128 Array<std::string> param; |
6043 | 129 |
130 if (nargin == 4) | |
131 { | |
20700
68e3a747ca02
rename octave_value value extractors that accept error message args
John W. Eaton <jwe@octave.org>
parents:
20681
diff
changeset
|
132 method = args(2).xstring_value ("urlwrite: METHOD must be a string"); |
6043 | 133 |
19404
c2f4f6eb5907
A few more instances of stricter input validation for strings (bug #42651).
Rik <rik@octave.org>
parents:
19403
diff
changeset
|
134 if (method != "get" && method != "post") |
23803
90689bdbe048
Use C++11 raw string literals to avoid escaping double quotes.
Rik <rik@octave.org>
parents:
23742
diff
changeset
|
135 error (R"(urlwrite: METHOD must be "get" or "post")"); |
6043 | 136 |
20700
68e3a747ca02
rename octave_value value extractors that accept error message args
John W. Eaton <jwe@octave.org>
parents:
20681
diff
changeset
|
137 param = args(3).xcellstr_value ("urlwrite: parameters (PARAM) for get and post requests must be given as a cell array of strings"); |
6043 | 138 |
18678
6113e0c6920b
maint: Clean up extra spaces before/after parentheses.
Rik <rik@octave.org>
parents:
18391
diff
changeset
|
139 if (param.numel () % 2 == 1) |
20831
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20819
diff
changeset
|
140 error ("urlwrite: number of elements in PARAM must be even"); |
6043 | 141 } |
142 | |
8151
3725f819b5b3
urlwrite.cc (Furlwrite): delete files we create if download fails
John W. Eaton <jwe@octave.org>
parents:
7481
diff
changeset
|
143 // The file should only be deleted if it doesn't initially exist, we |
3725f819b5b3
urlwrite.cc (Furlwrite): delete files we create if download fails
John W. Eaton <jwe@octave.org>
parents:
7481
diff
changeset
|
144 // create it, and the download fails. We use unwind_protect to do |
3725f819b5b3
urlwrite.cc (Furlwrite): delete files we create if download fails
John W. Eaton <jwe@octave.org>
parents:
7481
diff
changeset
|
145 // it so that the deletion happens no matter how we exit the function. |
3725f819b5b3
urlwrite.cc (Furlwrite): delete files we create if download fails
John W. Eaton <jwe@octave.org>
parents:
7481
diff
changeset
|
146 |
21736
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21733
diff
changeset
|
147 octave::sys::file_stat fs (filename); |
8151
3725f819b5b3
urlwrite.cc (Furlwrite): delete files we create if download fails
John W. Eaton <jwe@octave.org>
parents:
7481
diff
changeset
|
148 |
14846
460a3c6d8bf1
maint: Use Octave coding convention for cuddled parenthis in function calls with empty argument lists.
Rik <octave@nomad.inbox5.com>
parents:
14424
diff
changeset
|
149 std::ofstream ofile (filename.c_str (), std::ios::out | std::ios::binary); |
6043 | 150 |
6986 | 151 if (! ofile.is_open ()) |
20831
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20819
diff
changeset
|
152 error ("urlwrite: unable to open file"); |
6043 | 153 |
21743
f4d7d0eb5b0c
use namespace for unwind_protect class
John W. Eaton <jwe@octave.org>
parents:
21736
diff
changeset
|
154 octave::unwind_protect_safe frame; |
8151
3725f819b5b3
urlwrite.cc (Furlwrite): delete files we create if download fails
John W. Eaton <jwe@octave.org>
parents:
7481
diff
changeset
|
155 |
17549
a646665cd574
eliminate unecessary static function in urlwrite.cc
John W. Eaton <jwe@octave.org>
parents:
17548
diff
changeset
|
156 frame.add_fcn (delete_file, filename); |
9880 | 157 |
23742
1f0daaf81955
don't use singleton for ch_manager, rename to url_handle_manager
John W. Eaton <jwe@octave.org>
parents:
23577
diff
changeset
|
158 octave::url_transfer url_xfer (url, ofile); |
17596
43b9181340fb
separate object creation from http actions in url_transfer class
John W. Eaton <jwe@octave.org>
parents:
17556
diff
changeset
|
159 |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20909
diff
changeset
|
160 octave_value_list retval; |
6043 | 161 |
23742
1f0daaf81955
don't use singleton for ch_manager, rename to url_handle_manager
John W. Eaton <jwe@octave.org>
parents:
23577
diff
changeset
|
162 if (! url_xfer.is_valid ()) |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20909
diff
changeset
|
163 error ("support for URL transfers was disabled when Octave was built"); |
17553
2d01e20abd85
rework error handling for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
17551
diff
changeset
|
164 |
23742
1f0daaf81955
don't use singleton for ch_manager, rename to url_handle_manager
John W. Eaton <jwe@octave.org>
parents:
23577
diff
changeset
|
165 url_xfer.http_action (param, method); |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20909
diff
changeset
|
166 |
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20909
diff
changeset
|
167 ofile.close (); |
18287
9a43d8d6e29e
avoid startup crash if curl library is not available (bug #41067)
John W. Eaton <jwe@octave.org>
parents:
17861
diff
changeset
|
168 |
23742
1f0daaf81955
don't use singleton for ch_manager, rename to url_handle_manager
John W. Eaton <jwe@octave.org>
parents:
23577
diff
changeset
|
169 if (url_xfer.good ()) |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20909
diff
changeset
|
170 frame.discard (); |
18287
9a43d8d6e29e
avoid startup crash if curl library is not available (bug #41067)
John W. Eaton <jwe@octave.org>
parents:
17861
diff
changeset
|
171 |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20909
diff
changeset
|
172 if (nargout > 0) |
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20909
diff
changeset
|
173 { |
23742
1f0daaf81955
don't use singleton for ch_manager, rename to url_handle_manager
John W. Eaton <jwe@octave.org>
parents:
23577
diff
changeset
|
174 if (url_xfer.good ()) |
21732
6a1eded90355
use namespace for system env class
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
175 retval = ovl (octave::sys::env::make_absolute (filename), true, ""); |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20909
diff
changeset
|
176 else |
23742
1f0daaf81955
don't use singleton for ch_manager, rename to url_handle_manager
John W. Eaton <jwe@octave.org>
parents:
23577
diff
changeset
|
177 retval = ovl ("", false, url_xfer.lasterror ()); |
17553
2d01e20abd85
rework error handling for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
17551
diff
changeset
|
178 } |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20909
diff
changeset
|
179 |
23742
1f0daaf81955
don't use singleton for ch_manager, rename to url_handle_manager
John W. Eaton <jwe@octave.org>
parents:
23577
diff
changeset
|
180 if (nargout < 2 && ! url_xfer.good ()) |
1f0daaf81955
don't use singleton for ch_manager, rename to url_handle_manager
John W. Eaton <jwe@octave.org>
parents:
23577
diff
changeset
|
181 error ("urlwrite: %s", url_xfer.lasterror ().c_str ()); |
6043 | 182 |
183 return retval; | |
184 } | |
185 | |
17555
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
17554
diff
changeset
|
186 DEFUN (urlread, args, nargout, |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
187 doc: /* -*- texinfo -*- |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
188 @deftypefn {} {@var{s} =} urlread (@var{url}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
189 @deftypefnx {} {[@var{s}, @var{success}] =} urlread (@var{url}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
190 @deftypefnx {} {[@var{s}, @var{success}, @var{message}] =} urlread (@var{url}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
191 @deftypefnx {} {[@dots{}] =} urlread (@var{url}, @var{method}, @var{param}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
192 Download a remote file specified by its @var{url} and return its content |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
193 in string @var{s}. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
194 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
195 For example: |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
196 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
197 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
198 s = urlread ("ftp://ftp.octave.org/pub/README"); |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
199 @end example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
200 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
201 The variable @var{success} is 1 if the download was successful, |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
202 otherwise it is 0 in which case @var{message} contains an error |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
203 message. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
204 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
205 If no output argument is specified and an error occurs, then the error is |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
206 signaled through Octave's error handling mechanism. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
207 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
208 This function uses libcurl. Curl supports, among others, the HTTP, FTP, and |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
209 FILE protocols. Username and password may be specified in the URL@. For |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
210 example: |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
211 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
212 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
213 s = urlread ("http://user:password@@example.com/file.txt"); |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
214 @end example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
215 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
216 GET and POST requests can be specified by @var{method} and @var{param}. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
217 The parameter @var{method} is either @samp{get} or @samp{post} and |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
218 @var{param} is a cell array of parameter and value pairs. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
219 For example: |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
220 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
221 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
222 @group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
223 s = urlread ("http://www.google.com/search", "get", |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
224 @{"query", "octave"@}); |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
225 @end group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
226 @end example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
227 @seealso{urlwrite} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
228 @end deftypefn */) |
6043 | 229 { |
230 int nargin = args.length (); | |
231 | |
232 // verify arguments | |
19403
03067dab10ca
Use stricter input validation when looking for a string as input (bug #42651).
Rik <rik@octave.org>
parents:
19220
diff
changeset
|
233 if (nargin != 1 && nargin != 3) |
20799
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20726
diff
changeset
|
234 print_usage (); |
6043 | 235 |
20700
68e3a747ca02
rename octave_value value extractors that accept error message args
John W. Eaton <jwe@octave.org>
parents:
20681
diff
changeset
|
236 std::string url = args(0).xstring_value ("urlread: URL must be a string"); |
19404
c2f4f6eb5907
A few more instances of stricter input validation for strings (bug #42651).
Rik <rik@octave.org>
parents:
19403
diff
changeset
|
237 |
6043 | 238 std::string method; |
17554
f0d21e7d4653
avoid Cell arrays in usr_transfer classes
John W. Eaton <jwe@octave.org>
parents:
17553
diff
changeset
|
239 Array<std::string> param; |
6043 | 240 |
241 if (nargin == 3) | |
242 { | |
20700
68e3a747ca02
rename octave_value value extractors that accept error message args
John W. Eaton <jwe@octave.org>
parents:
20681
diff
changeset
|
243 method = args(1).xstring_value ("urlread: METHOD must be a string"); |
6043 | 244 |
19404
c2f4f6eb5907
A few more instances of stricter input validation for strings (bug #42651).
Rik <rik@octave.org>
parents:
19403
diff
changeset
|
245 if (method != "get" && method != "post") |
23803
90689bdbe048
Use C++11 raw string literals to avoid escaping double quotes.
Rik <rik@octave.org>
parents:
23742
diff
changeset
|
246 error (R"(urlread: METHOD must be "get" or "post")"); |
6043 | 247 |
20700
68e3a747ca02
rename octave_value value extractors that accept error message args
John W. Eaton <jwe@octave.org>
parents:
20681
diff
changeset
|
248 param = args(2).xcellstr_value ("urlread: parameters (PARAM) for get and post requests must be given as a cell array of strings"); |
6043 | 249 |
18678
6113e0c6920b
maint: Clean up extra spaces before/after parentheses.
Rik <rik@octave.org>
parents:
18391
diff
changeset
|
250 if (param.numel () % 2 == 1) |
20831
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20819
diff
changeset
|
251 error ("urlread: number of elements in PARAM must be even"); |
6043 | 252 } |
253 | |
6986 | 254 std::ostringstream buf; |
6043 | 255 |
23742
1f0daaf81955
don't use singleton for ch_manager, rename to url_handle_manager
John W. Eaton <jwe@octave.org>
parents:
23577
diff
changeset
|
256 octave::url_transfer url_xfer = octave::url_transfer (url, buf); |
17596
43b9181340fb
separate object creation from http actions in url_transfer class
John W. Eaton <jwe@octave.org>
parents:
17556
diff
changeset
|
257 |
23742
1f0daaf81955
don't use singleton for ch_manager, rename to url_handle_manager
John W. Eaton <jwe@octave.org>
parents:
23577
diff
changeset
|
258 if (! url_xfer.is_valid ()) |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20909
diff
changeset
|
259 error ("support for URL transfers was disabled when Octave was built"); |
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20909
diff
changeset
|
260 |
23742
1f0daaf81955
don't use singleton for ch_manager, rename to url_handle_manager
John W. Eaton <jwe@octave.org>
parents:
23577
diff
changeset
|
261 url_xfer.http_action (param, method); |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20909
diff
changeset
|
262 |
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20909
diff
changeset
|
263 octave_value_list retval; |
6043 | 264 |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20909
diff
changeset
|
265 if (nargout > 0) |
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20909
diff
changeset
|
266 { |
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20909
diff
changeset
|
267 // Return empty string if no error occurred. |
23742
1f0daaf81955
don't use singleton for ch_manager, rename to url_handle_manager
John W. Eaton <jwe@octave.org>
parents:
23577
diff
changeset
|
268 retval = ovl (buf.str (), url_xfer.good (), |
1f0daaf81955
don't use singleton for ch_manager, rename to url_handle_manager
John W. Eaton <jwe@octave.org>
parents:
23577
diff
changeset
|
269 url_xfer.good () ? "" : url_xfer.lasterror ()); |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20909
diff
changeset
|
270 } |
18287
9a43d8d6e29e
avoid startup crash if curl library is not available (bug #41067)
John W. Eaton <jwe@octave.org>
parents:
17861
diff
changeset
|
271 |
23742
1f0daaf81955
don't use singleton for ch_manager, rename to url_handle_manager
John W. Eaton <jwe@octave.org>
parents:
23577
diff
changeset
|
272 if (nargout < 2 && ! url_xfer.good ()) |
1f0daaf81955
don't use singleton for ch_manager, rename to url_handle_manager
John W. Eaton <jwe@octave.org>
parents:
23577
diff
changeset
|
273 error ("urlread: %s", url_xfer.lasterror ().c_str ()); |
6043 | 274 |
275 return retval; | |
276 } | |
9880 | 277 |
27048
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
278 DEFUN (__restful_service__, args, nargout, |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
279 doc: /* -*- texinfo -*- |
27795
afbaad39d25c
doc: grammarcheck C++ files in libinterp/ directory.
Rik <rik@octave.org>
parents:
27357
diff
changeset
|
280 @deftypefn {} {@var{response} =} __restful_service__ (@var{url}, @var{param}, @var{weboptions}) |
27048
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
281 Undocumented internal function. |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
282 @end deftypefn */) |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
283 { |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
284 int nargin = args.length (); |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
285 |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
286 if (nargin < 1) |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
287 print_usage (); |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
288 |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
289 std::string url = args(0).xstring_value ("__restful_service__: URL must be a string"); |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
290 |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
291 std::ostringstream content; |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
292 |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
293 octave::url_transfer url_xfer (url, content); |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
294 |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
295 if (! url_xfer.is_valid ()) |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
296 error ("support for URL transfers was disabled when Octave was built"); |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
297 |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
298 Array<std::string> param = args(1).cellstr_value (); |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
299 |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
300 std::string data, method; |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
301 |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
302 struct octave::weboptions options; |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
303 |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
304 octave::cdef_object object = args (nargin - 1).classdef_object_value () |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
305 -> get_object (); |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
306 |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
307 // We could've used object.map_value () instead to return a map but that |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
308 // shows a warning about about overriding access restrictions. |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
309 // Nevertheless, we are keeping checking that here if the keys are not |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
310 // equal to "delete" and "display", getting away with the warning. |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
311 string_vector keys = object.map_keys (); |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
312 |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
313 for (int i = 0; i < keys.numel (); i++) |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
314 { |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
315 if (keys(i) == "Timeout") |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
316 { |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
317 float timeout = object.get (keys(i)).float_value (); |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
318 options.Timeout = static_cast<long>(timeout * 1000); |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
319 } |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
320 |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
321 if (keys(i) == "HeaderFields") |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
322 { |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
323 options.HeaderFields = object.get (keys(i)).cellstr_value (); |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
324 } |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
325 |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
326 // FIXME: 'delete' and 'display', auto-generated, probably by cdef_object |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
327 // class? Remaining fields have already been adjusted elsewhere in the |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
328 // m-script. Set 'value' as the Value of the Key wherever it's a string. |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
329 if (keys(i) != "Timeout" && keys(i) != "HeaderFields" |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
330 && keys(i) != "delete" && keys(i) != "display") |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
331 { |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
332 std::string value = object.get (keys(i)).string_value (); |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
333 |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
334 if (keys(i) == "UserAgent") |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
335 options.UserAgent = value; |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
336 |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
337 if (keys(i) == "Username") |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
338 options.Username = value; |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
339 |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
340 if (keys(i) == "Password") |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
341 options.Password = value; |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
342 |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
343 if (keys(i) == "ContentReader") |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
344 // Unimplemented. Only for MATLAB compatibility. |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
345 options.ContentReader = ""; |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
346 |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
347 if (keys(i) == "RequestMethod") |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
348 method = value; |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
349 |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
350 if (keys(i) == "ArrayFormat") |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
351 options.ArrayFormat = value; |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
352 |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
353 if (keys(i) == "CertificateFilename") |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
354 options.CertificateFilename = ""; |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
355 } |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
356 } |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
357 |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
358 url_xfer.set_weboptions (options); |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
359 |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
360 url_xfer.http_action (param, method); |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
361 |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
362 if (nargout < 2 && ! url_xfer.good ()) |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
363 error ("__restful_service__: %s", url_xfer.lasterror ().c_str ()); |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
364 |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
365 return ovl (content.str ()); |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
366 } |