PHP curl fetch, так как JSON не работает

У меня есть следующий скрипт PHP, который должен перейти по URL-адресу и получить вывод JSON с этой страницы:

function nexusCheck($nexusUrl, $toolName, $verboseBool, $httpCode, $connectTime, $totalTime) {
global $date;
$username = 'user';
$password = 'password';
$URL = "$nexusUrl" . "/service/siesta/capabilities";
$handle = curl_init();
$timeout = 30;
curl_setopt($handle, CURLOPT_URL, $URL);
curl_setopt($handle, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($handle, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt($handle, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
//curl_setopt($handle, CURLOPT_HEADER, array('Accept: application/json' , 'Content-Type: application/json'));
curl_setopt($handle, CURLOPT_HEADER, "Accept: application/json");
curl_setopt($handle, CURLOPT_USERPWD, "{$username}:{$password}");
//var_dump(curl_setopt($handle, CURLOPT_USERPWD, "{$username}:{$password}"));
$result = curl_exec($handle);

//echo encode_json($result);
//echo decode_json($result);
echo($result);

curl_close($handle);
}

Итак, как уже упоминалось, вывод должен быть в формате JSON, однако сейчас вывод выводится только как текст. Я не уверен, почему это происходит, потому что, когда я на самом деле делаю скручивание на своем терминале, вывод получается как JSON!

Мое заявление cURL: curl -X GET -H "Accept: application/json" -u username:password "http://nexus.company.net/service/siesta/capabilities",

Есть идеи, почему на выходе просто текст? Что я здесь не так делаю?

РЕДАКТИРОВАТЬ: Чтобы уточнить, я имел в виду, что результат, который отображается на странице, не кодируется как структура данных JSON. Однако, когда я делаю это выражение curl в терминале, вывод кодируется должным образом.

РЕДАКТИРОВАТЬ 2: Хорошо, поэтому вывод выглядит так:

000d43932f6eb3f3truesmartproxy.event.publishrepositoryio-aws-internal-releasesfeedEnabledfalseIO AWS Company Internal Hosted ReleasestruefalseSmart Proxy: PublishActiveCategorySmart ProxyRepositoryIO AWS Company Internal Hosted Releases00028650f5fea946truesmartproxy.event.publishrepositoryio-thirdpartyfeedEnabledfalseIO 3rd partytruefalseSmart Proxy: PublishActiveCategorySmart ProxyRepositoryIO 3rd party000d43932f6eb3f1truesmartproxy.event.publishrepositoryio-aws-internal-snapshotsfeedEnabledfalseIO AWS Company Internal Hosted SnapshotstruefalseSmart Proxy: PublishActiveCategorySmart ProxyRepositoryIO AWS Company Internal Hosted Snapshots000d43932f6eb3f2falsesmartproxy.event.subscriberepositoryio-aws-internal-snapshotspreemptiveFetchfalsedeletetruefeedEnabledfalseIO AWS Company Internal Hosted SnapshotsfalsefalseSmart Proxy: SubscribeDisabledCategorySmart ProxyRepositoryIO AWS Company Internal Hosted Snapshots000d43932f6eb3f0truesmartproxy.event.publishrepositorypublicfeedEnabledfalsePublic RepositoriestruefalseSmart Proxy: PublishActiveCategorySmart ProxyRepositoryPublic Repositories00028650f5fea949truesmartproxy.event.subscriberepositoryio-core-releasespreemptiveFetchtruedeletetruefeedEnabledfalseIO Core Services ReleasestruefalseSmart Proxy: SubscribeActive<h2>Monitor State</h2> <br/> <div> <pre>CONNECTED</pre> </div> <br/> <h2>Remote Node ID</h2> <br/> <div> <pre>8FA5D941-31598C8F-B7C4203F-EDD413CA-B94B6C03</pre> </div> <br/> <h2>Remote Connection URI</h2> <br/> <div> <pre>ssl://nexus.company.net:51773</pre> </div> <br/> <h2>Remote Repository ID</h2> <br/> <div> <pre>core-release-proxy</pre> </div> <br/> <h2>Handshake Status</h2> <br/> <div> <pre>ENABLED</pre> </div> <br/> <h2>Remote Certificate Fingerprint</h2> <br/> <div> <pre>8F:A5:D9:41:31:59:8C:8F:B7:C4:20:3F:ED:D4:13:CA:B9:4B:6C:03</pre> </div> <br/> <h2>Remote Certificate PEM</h2> <br/> <div> <pre>-----BEGIN CERTIFICATE----- MIIDijCCAnKgAwIBAgIGAVQ0GItxMA0GCSqGSIb3DQEBBQUAMIGEMS0wKwYDVQQD DCRmNWQ3ODQ1MS1jNmJkLTQzOTQtYTU2OS1iODY5OWE4ZDk1MmUxDjAMBgNVBAsM BLAHBLAHBLAHBLAHBLAHBLHKLHJKDLJFKDLJKFLDJKFLDJKLFDJKFDJKLFDJKLFJ usgJWixHE5e3JZD7ZaBlhmKcBf/gF6HWNOrhh6exV/PTUnQreLaMSQ6gt/2zP/3e mCHR0iMOXPDCI8nKCGxPuNGoTR/aY5ZBihJeCPTSRoV6+6G0ATCqwM6QxePJk/yT 64f8rHRdD+6sJKr3lzBVXTIYGz0bVK+AKCRA+MaeQT0bcYU6UJMGF5jKPKUPEg== -----END CERTIFICATE----- </pre> </div> <br/> <h2>Remote Certificate Detail</h2> <br/> <div> <pre> [0] Version: 3 SerialNumber: 1461162904433 IssuerDN: CN=f5d78451-c6bd-4394-a569-b8699a8d952e,OU=Nexus,O=Sonatype,L=Silver Spring,ST=MD,C=US Start Date: Wed Apr 20 14:35:04 UTC 2016 Final Date: Fri Mar 27 14:35:04 UTC 2116 SubjectDN: CN=f5d78451-c6bd-4394-a569-b8699a8d952e,OU=Nexus,O=Sonatype,L=Silver Spring,ST=MD,C=US Public Key: RSA Public Key modulus: 98a2f8f258a8348f5b3bcee954cdf59dccb052c9bf17e1a514cdff759accc44e7f42e2773blahblahblahblajblahlbhalbhlahblhalbhalhblahblahblahblahlbhalbhalhblahblac99f586c2c2035b37889aff642120cdd147d54d3e09d8ad5c213b8bfae3133633660df75e1 public exponent: 10001 Signature Algorithm: SHA1WITHRSA Signature: aac0ce90c5e3c993fc93eb87fcac745d0feeac24 aaf79730555d32181b3d1b54af80282440f8c69e 413d1b71853a5093061798ca3ca50f12 </pre> </div> <br/> <h2>Shared Connection Detail</h2> <br/> <div> <pre>ActiveMQConnection {id=ID:ip-10-96-2-8-44490-1465326994959-58:1,clientId=ID:ip-10-96-2-8-44490-1465326994959-57:1,started=true}</pre> </div> <br/> CategorySmart ProxyRepositoryIO Core Services Releases00028650f5fea948truesmartproxy.event.publishrepositoryio-core-releasesfeedEnabledfalseIO Core Services ReleasestruefalseSmart Proxy: PublishActiveCategorySmart ProxyRepositoryIO Core Services Releases00028650f5fea947truesmartproxy.event.subscriberepositoryio-thirdpartypreemptiveFetchtruedeletetruefeedEnabledfalseIO 3rd partytruefalseSmart Proxy: SubscribeActive<h2>Monitor State</h2> <br/> <div> <pre>CONNECTED</pre> </div> <br/> <h2>Remote Node ID</h2> <br/> <div> <pre>8FA5D941-B94B6C03</pre> </div> <br/> <h2>Remote Connection URI</h2> <br/> <div> <pre>ssl://nexus.company.net:51773</pre> </div> <br/> ..................................................................................................................................................

Вместо (что я получаю из командной строки):

[ {
"capability" : {
"id" : "000d43932f6eb3f3",
"notes" : null,
"enabled" : true,
"typeId" : "smartproxy.event.publish",
"properties" : [ {
"key" : "repository",
"value" : "io-aws-internal-releases"}, {
"key" : "feedEnabled",
"value" : "false"} ]
},
"description" : "IO AWS Company Internal Hosted Releases",
"active" : true,
"error" : false,
"typeName" : "Smart Proxy: Publish",
"stateDescription" : "Active",
"status" : null,
"tags" : [ {
"key" : "Category",
"value" : "Smart Proxy"}, {
"key" : "Repository",
"value" : "IO AWS Company Internal Hosted Releases"} ]
}, {
"capability" : {
"id" : "00028650f5fea946",
"notes" : null,
"enabled" : true,
"typeId" : "smartproxy.event.publish",
"properties" : [ {
"key" : "repository",
"value" : "io-thirdparty"}, {
"key" : "feedEnabled",
"value" : "false"} ]
},
"description" : "IO 3rd party",
"active" : true,
"error" : false,
"typeName" : "Smart Proxy: Publish",
"stateDescription" : "Active",
"status" : null,
"tags" : [ {
"key" : "Category",
"value" : "Smart Proxy"}, {
"key" : "Repository",
"value" : "IO 3rd party"} ].........................................................................................................................

EDIT3: так избавиться Говоря лучше, я думаю, что происходит, когда я пытаюсь сделать такой же запрос в PHP, как вы делаете с командной строкой cURL, сервер возвращает другой формат, когда вы делаете запрос из PHP.

EDIT4: Таким образом, используя HTTPHEADER вместо HEADER и отправка заголовка в виде массива сделала свое дело, однако есть небольшая проблема, когда, если значение ключа имеет HTML-теги, браузер форматирует страницу, используя эти теги. Ну вот так:

Вот как это должно выглядеть:

  "stateDescription" : "Active",
"status" : "<h2>Node ID</h2>\n<br/>\n<div>\n    <pre>8FA5D941-31598C8F-B7C4203F-EDD413CA-B94B6C03</pre>\n</div>\n\n<br/>\n\n<h2>Fingerprint</h2>\n<br/>\n<div>\n    <pre>8F:A5:D9:41B9:4B:6C:03</pre>\n</div>\n\n<br/>\n\n<h2>Certificate</h2>\n<br/>\n<div>\n    <pre>-----BEGIN CERTIFICATE-----\nMIIDijCCAnKgAwIBAgIGAVQ0GItxMA0GCSqGSIb3DQEBBQUAMIGEMS0wKwYDVQQD\nDCRmNWQ3ODQ1MS1jNmJkLTQzOTQtYTU2OS1iODY5OWE4ZDk1MmUxDjAMBgNVBAsM\nBU5leHVzMREw6exV/PTUnQreLaMSQ6gt/2zP/3e\nmCHR0iMOXPDCI8nKCGxPuNGoTR/aY5ZBihJeCPTSRoV6+6G0ATCqwM6QxePJk/yT\n64f8rHRdD+6sJKr3lzBVXTIYGz0bVK+AKCRA+MaeQT0bcYU6UJMGF5jKPKUPEg==\n-----END CERTIFICATE-----\n</pre>\n        </div>\n\n<br/>\n\n<h2>Detail</h2>\n<br/>\n<div>\n    <pre>[\n[\n  Version: V3\n  Subject: C=US, ST=MD, L=Silver Spring, O=Sonatype, OU=Nexus, CN=f5d78451-c6bd-4394-a569-b8699a8d952e\n  Signature Algorithm: SHA1withRSA, OID = 1.2.840.113549.1.1.5\n\n  Key:  Sun RSA public key, 2048 bits\n  modulus: 19268587064139719085609236135424479219819536352682784106558145114346679106038989267437271230004063018121065830291975586740542592294259900243345540709378803877292510984799053572694764430270406900807137\n  public exponent: 65537\n  Validity: [From: Wed Apr 20 14:35:04 UTC 2016,\n               To: Fri Mar 27 14:35:04 UTC 2116]\n  Issuer: C=US, ST=MD, L=Silver Spring, O=Sonatype, OU=Nexus, CN=f5d78451-c6bd-4394-a569-b8699a8d952e\n  SerialNumber: [    01543418 8b71]\n\n]\n  Algorithm: [SHA1withRSA]\n  Signature:\n0000: 72 16 A7 0E 0A 83 74 97   BC 9E FD FD F6 53 34 33  r.....t......S43\n0010: AF 0D 9B 67 84 73 2E A2   93 79 81 7F 41 B8 91 C9   C0 CE 90 C5 E3 C9 93  F.z....0........\n00D0: FC 93 EB 87 FC AC 74 5D   0F EE AC 24 AA F7 97 30  ......t]...$...0\n00E0: 55 5D 32 18 1B 3D 1B 54   AF 80 28 24 40 F8 C6 9E  U]2..=.T..($@...\n00F0: 41 3D 1B 71 85 3A 50 93   06 17 98 CA 3C A5 0F 12  A=.q.:P.....<...\n\n]</pre>\n</div>\n",
"tags" : [ {
"key" : "Category",
"value" : "Smart Proxy"} ]

Вместо этого я получаю это:

введите описание изображения здесь

1

Решение

проблема 1: вы не отправляете Accept: application/json заголовок, потому что вы не используете CURLOPT_HTTPHEADER, вы используете CURLOPT_HEADER, и вы используете не массив, а строку. исправить оба из них.

проблема 2: вы не указываете CURLOPT_USERAGENT, и становится все более популярным блокировать запросы, не содержащие заголовок пользовательского агента … вы должны это исправить, просто чтобы быть уверенным.

и protip: включите CURLOPT_ENCODING как пустую строку, ваши переводы волшебным образом станут быстрее благодаря этому.

-1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]