我是php的初学者,并且有一个我想从中读取数据的API。在我的本地主机上,它可以正常工作,并且所有输出均符合预期。 Postman应用程序也是如此。当我从本地主机而不是本地API访问Web API时,它甚至可以工作。但是,只要我尝试在实时网站上获得结果,它就会返回NULL。
注意:它是一个WordPress网站。 Localhost是通过Xampp完成的。通过SiteGround在线托管。我过去曾做过这项工作,但我不知道突然停止工作的情况(也许我做了些改动)。 API是具有预配置API的WordPress许可证管理器插件。域名/ IP /和客户机密不是原始的。
#!/bin/usr/env python
# ===========================================================
# Created By: Richard Barrett
# Organization: DVISD
# DepartmenT: Data Services
# Purpose: Skyward Reports
# Date: 04/03/2020
# ===========================================================
import selenium
import shutil
import xlsxwriter
import os
import unittest
import requests
import subprocess
import getpass
import platform
import socket
import ssl
import pynput
import logging
import time
from pynput.keyboard import Key, Controller
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from datetime import date
decrypt = "gpg --output secrets.json --decrypt secrets.gpg"
if os.path.exists("secrets.gpg"):
returned_value = subprocess.call(decrypt, shell=True)
else:
print("The file does not exist!")
print("You should probably create a secret!")
print("gpg --output filename.gpg --encrypt filename.json")
import json
with open('secrets.json','r') as f:
config = json.load(f)
# Definitions
# find_elements_by_name
# find_elements_by_xpath
# find_elements_by_link_text
# find_elements_by_partial_link_text
# find_elements_by_tag_name
# find_elements_by_class_name
# find_elements_by_css_selector
# System Variables
today = date.today()
date = today.strftime("%m/%d/%Y")
node = platform.node()
system = platform.system()
username = getpass.getuser()
version = platform.version()
keyboard = Controller()
# Upload Path Variables
file_input_inactive_users = os.path.abspath("<insert_file_path>")
# URL Variables
login_url = ''
redirect_url = ''
reports_scheduler_url = ''
custom_reports_url = ''
# Check for Version of Chrome
# WebDriver Path for OS.System
if platform.system() == ('Windows'):
browser = webdriver.Chrome("C:\Program Files (x86)\Google\Chrome\chromedriver.exe")
elif platform.system() == ('Linux'):
browser = webdriver.Chrome(executable_path='/home/rbarrett/Drivers/Google/Chrome/chromedriver_linux64/chromedriver')
elif platform.system() == ('Darwin'):
browser = webdriver.Chrome(executable_path='~/Drivers/Google/Chrome/chromedriver_mac64/chromedriver')
else:
print("Are you sure you have the Selenium Webdriver installed in the correct path?")
# TearDown Method
def tearDown(self):
self.browser.close()
# ShutDown Method
def shutDown(self):
self.browser.quit()
# Parent URL
#browser.get(config['URL']['target_url'])
#browser.get("https://skyward-student.del-valle.k12.tx.us/scripts/wsisa.dll/WService=wsEAplus/seplog01.w?nopopup=true")
#options.addArguments("--ignore-certificate-errors")
browser.get("https://skyward-dev.del-valle.k12.tx.us/scripts/wsisa.dll/WService=wsEAplusTrn/seplog01.w?nopopup=true")
time.sleep(5)
# Click on Advanced Button for Certificate Error
# XPATH //*[@id='details-button']
element = WebDriverWait(browser, 20).until(
EC.element_to_be_clickable((By.XPATH, "//*[@id='details-button']")))
element.click();
# Click on Proceed
# XPATH //*[@id'proceed-link']
element = WebDriverWait(browser, 20).until(
EC.element_to_be_clickable((By.ID, "proceed-link")))
element.click();
time.sleep(10)
# Credentials NEEDS UNIT TEST
username = browser.find_element_by_id("login")
password = browser.find_element_by_id("password")
username.send_keys(config['user']['name'])
password.send_keys(config['user']['password'])
# Authentication submit.click()
# For XPATH = //*[@id='bLogin']
element = WebDriverWait(browser, 20).until(
EC.element_to_be_clickable((By.XPATH, "//*[@id='bLogin']")))
element.click();
print("Logging into Skyward!")
print("Authenticated")
# Click and Span Skyward Contact Access
# Adminsitration XPATH = //*[@id='nav_ContactAccess']/span
element = WebDriverWait(browser, 20).until(
EC.element_to_be_clickable((By.XPATH, "//*[@id='nav_ContactAccess']/span")))
element.click();
# Click on Secured Users Access
# Adminsitration XPATH = //*[@id='nav_SecuredUserSuperUser']/span
element = WebDriverWait(browser, 20).until(
EC.element_to_be_clickable((By.XPATH, "//*[@id='nav_SecuredUserSuperUser']/span")))
element.click();
# Click on id="browsetool_export"
# Opens Options to Download Report
# XPATH = //*[@id='browsetool_export']
element = WebDriverWait(browser, 20).until(
EC.element_to_be_clickable((By.XPATH, "//*[@id='browsetool_export']")))
element.click();
# Click on .CSV Radio Button
# XPATH = //*[@id='ExCOptCSV']
element = WebDriverWait(browser, 20).until(
EC.element_to_be_clickable((By.XPATH, "//*[@id='ExCOptCSV']")))
element.click();
# Click on Export Button
# XPATH = //*[@id='bExport']
element = WebDriverWait(browser, 20).until(
EC.element_to_be_clickable((By.XPATH, "//*[@id='bExport']")))
element.click();
# Click on id="browsetool_export"
# Opens Options to Download Report
# XPATH = //*[@id='browsetool_export']
element = WebDriverWait(browser, 20).until(
EC.element_to_be_clickable((By.XPATH, "//*[@id='browsetool_export']")))
element.click();
# Click on .xlsx Radio Button
# XPATH = //*[@id='ExCOptXLSX']
element = WebDriverWait(browser, 20).until(
EC.element_to_be_clickable((By.XPATH, "//*[@id='ExCOptXLSX']")))
element.click();
# Click on Export Button
# XPATH = //*[@id='bExport']
element = WebDriverWait(browser, 20).until(
EC.element_to_be_clickable((By.XPATH, "//*[@id='bExport']")))
element.click();
time.sleep(20)
# Click on Download Export Button
# XPATH = //*[@id='printMsgBtn1']
element = WebDriverWait(browser, 20).until(
EC.element_to_be_clickable((By.XPATH, "//*[@id='printMsgBtn1']")))
element.click();
# Click on Run Button
# Run Button XPATH =
# Delete Unencrypted JSON File
if os.path.exists("secrets.json"):
os.remove("secrets.json")
print("The file was removed and everything is clean!")
else:
print("The file does not exist")
# Close Browser Session Gracefully
print("The Export was successfull!")
#browser.quit()
在我的本地主机上,此代码产生此响应,而这正是我需要的:
$url = "https://example.com/wp-json/lmfwc/v2/licenses?consumer_key=ck_xxxx&consumer_secret=cs_yyy";
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_FOLLOWLOCATION => True,
CURLOPT_HTTPHEADER =>array (
'Accept: application/json'),
CURLOPT_SSL_VERIFYHOST => false,
CURLOPT_SSL_VERIFYPEER => false,
));
$response = curl_exec($curl);
print_r($response) ?> <br><br> <?php ;
$json_response =json_encode($response);
print_r($json_response) ?> <br><br> <?php ;
$info_display = curl_getinfo($curl);
print_r ($info_display); ?> <br><br> <?php
$array_response = json_decode($response);
print_r($array_response); ?> <br> <br><?php
$err = curl_error($curl);
var_dump($err); ?> <br> <br><?php
curl_close($curl);
我的实时网站上的相同代码崩溃。所以我需要注释掉
> {"success":true,"data":{"id":"1","orderId":null,"productId":"2037","licenseKey":"1232edwfsd2","expiresAt":null,"validFor":"14","source":"2","status":"3","timesActivated":"0","timesActivatedMax":"1","createdAt":"2020-02-06
> 20:35:56","createdBy":"1","updatedAt":"2020-02-08
> 12:34:20","updatedBy":"1"}}
>
> "{\"success\":true,\"data\":{\"id\":\"1\",\"orderId\":null,\"productId\":\"2037\",\"licenseKey\":\"1232edwfsd2\",\"expiresAt\":null,\"validFor\":\"14\",\"source\":\"2\",\"status\":\"3\",\"timesActivated\":\"0\",\"timesActivatedMax\":\"1\",\"createdAt\":\"2020-02-06
> 20:35:56\",\"createdBy\":\"1\",\"updatedAt\":\"2020-02-08
> 12:34:20\",\"updatedBy\":\"1\"}}"
>
> Array ( [url] =>
> https://example.com/wp-json/lmfwc/v2/licenses?consumer_key=ck_xxx&consumer_secret=cs_yyy
> [content_type] => application/json; charset=UTF-8 [http_code] => 200
> [header_size] => 657 [request_size] => 250 [filetime] => -1
> [ssl_verify_result] => 0 [redirect_count] => 0 [total_time] =>
> 2.164129 [namelookup_time] => 0.000694 [connect_time] => 0.256472 [pretransfer_time] => 0.40321 [size_upload] => 0 [size_download] =>
> 205 [speed_download] => 94 [speed_upload] => 0
> [download_content_length] => -1 [upload_content_length] => -1
> [starttransfer_time] => 2.164067 [redirect_time] => 0 [redirect_url]
> => [primary_ip] => *censored by author* [certinfo] => Array ( ) [primary_port] => 443 [local_ip] => *censored by author* [local_port] => *censored by author* [http_version] => 3 [protocol] => 2 [ssl_verifyresult] => 0 [scheme]
> => HTTPS [appconnect_time_us] => 403002 [connect_time_us] => 256472 [namelookup_time_us] => 694 [pretransfer_time_us] => 403210
> [redirect_time_us] => 0 [starttransfer_time_us] => 2164067
> [total_time_us] => 2164129 )
>
> stdClass Object ( [success] => 1 [data] => stdClass Object ( [id] => 1
> [orderId] => [productId] => 2037 [licenseKey] => 1232edwfsd2
> [expiresAt] => [validFor] => 14 [source] => 2 [status] => 3
> [timesActivated] => 0 [timesActivatedMax] => 1 [createdAt] =>
> 2020-02-06 20:35:56 [createdBy] => 1 [updatedAt] => 2020-02-08
> 12:34:20 [updatedBy] => 1 ) )
>
> string(0) ""
>
> status: 3 times activated: 0 times activated max: 1 last update:
> 2020-02-08 12:34:20
那我就能得到这个结果:
//print_r($response) ?> <br><br> <?php ;
在Google Chrome浏览器的“开发者控制台”的“网络”标签中,我可以看到这一点。所有请求返回状态200:
> "<\/meta><\/head><\/html>"
>
> Array ( [url] =>
> https://example.com/wp-json/lmfwc/v2/licenses?consumer_key=ck_xxx&consumer_secret=cs_yyy
> [content_type] => text/html [http_code] => 200 [header_size] => 277
> [request_size] => 254 [filetime] => -1 [ssl_verify_result] => 0
> [redirect_count] => 0 [total_time] => 0.01762 [namelookup_time] =>
> 0.000747 [connect_time] => 0.000873 [pretransfer_time] => 0.016955 [size_upload] => 0 [size_download] => 96 [speed_download] => 5647
> [speed_upload] => 0 [download_content_length] => -1
> [upload_content_length] => -1 [starttransfer_time] => 0.017479
> [redirect_time] => 0 [redirect_url] => [primary_ip] => *censored by author*
> [certinfo] => Array ( ) [primary_port] => 443 [local_ip] => *censored by author*
> [local_port] => *censored by author* [http_version] => 3 [protocol] => 2
> [ssl_verifyresult] => 0 [scheme] => HTTPS [appconnect_time_us] =>
> 16862 [connect_time_us] => 873 [namelookup_time_us] => 747
> [pretransfer_time_us] => 16955 [redirect_time_us] => 0
> [starttransfer_time_us] => 17479 [total_time_us] => 17620 )
>
>
>
> string(0) ""
>
> status: times activated: times activated max: last update:
编辑:将以下代码添加到我的php代码段的开头,该代码段是通过php-snipped插件添加到wordpress的:
Request URL: https://example.com/check-in/
Request Method: GET
Status Code: 200
Remote Address: *censored by author*
Referrer Policy: no-referrer-when-downgrade
cache-control: no-transform, no-cache, no-store, must-revalidate
content-encoding: gzip
content-type: text/html; charset=UTF-8
date: Fri, 03 Apr 2020 20:01:50 GMT
expires: Wed, 11 Jan 1984 05:00:00 GMT
host-header: 192fc2e7e50945beb8231a492d6a8024
link: <https://example.com/wp-json/>; rel="https://api.w.org/", <https://example.com/?p=2463>; rel=shortlink
server: nginx
status: 200
vary: Accept-Encoding
x-httpd: 1
x-proxy-cache: BYPASS
x-proxy-cache-info: D NC:200000 UP:1
:authority: example.com
:method: GET
:path: /check-in/
:scheme: https
accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
accept-encoding: gzip, deflate, br
accept-language: en-US,en;q=0.9,de-DE;q=0.8,de;q=0.7,nl-NL;q=0.6,nl;q=0.5,fr;q=0.4
cache-control: max-age=0
cookie: *censored by author*
referer: https://example.com/
sec-fetch-dest: document
sec-fetch-mode: navigate
sec-fetch-site: same-origin
sec-fetch-user: ?1
upgrade-insecure-requests: 1
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36
我在前端将其返回:
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
答案 0 :(得分:0)
您应该将以下行放入脚本的第一行。将显示所有错误,然后,应在生产环境中删除此行
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
答案 1 :(得分:0)
在wordpress API可以输出之前,您似乎正在向输出缓冲区中写入一些内容。